我的C++用来给java调用,程序如下,调用后内存会增加.帮我看一下.
#include <winsock.h>
#include <stdlib.h>
#include "jni_md.h"
#include "Cmdresv.h"
#include <iostream>
#include <string>
using namespace std;class MyConnect
{
private:
SOCKET sock;
char *buff;//缓冲区
struct sockaddr_in sa;
WSADATA wsd;
bool istate;//网络连接状态
public:
MyConnect();
int my_connect(string seraddr,int port);
int my_send(char ssbuf[512],int len);
void my_receive(char ssbuf[512]);
void my_disconnect();
  ~MyConnect();
};MyConnect::MyConnect()
{
//socket的初始化
sock=socket(AF_INET,SOCK_STREAM,0);
buff=NULL;
memset(&sa,0,sizeof(sa));
istate=false;
}int MyConnect::my_connect(string seraddr,int port)
{
if(istate==true)
{
cout<<"SYSTEM>> NETWORK ALREADY CONNECTED!"<<endl;
return 0;
}
else
{
int ret;
WSAStartup(MAKEWORD(1,1),&wsd);
sock=socket(AF_INET,SOCK_STREAM,0);
//输入服务器IP地址

unsigned long uladdr;
     string servaddr=seraddr;
uladdr=inet_addr(servaddr.c_str());

//输入服务器端口
int servport=1024;

memset(&sa,0,sizeof(sa));

unsigned long ul = 1;
         ret = ioctlsocket(sock, FIONBIO, (unsigned long*)&ul);
        if(ret==SOCKET_ERROR)return 0;
sa.sin_family=AF_INET;
sa.sin_port=htons(servport);
sa.sin_addr.S_un.S_addr=uladdr;

//连接

     connect(sock,(const sockaddr*)&sa,sizeof(sa));
struct timeval timeout ;
fd_set r;FD_ZERO(&r);
FD_SET(sock, &r);
timeout.tv_sec = 2; //连接超时15秒
timeout.tv_usec =0;
ret = select(0, 0, &r, 0, &timeout);
if ( ret <= 0 )
{
closesocket(sock);
return 0;
}unsigned long ul1= 0 ;
ret = ioctlsocket(sock, FIONBIO, (unsigned long*)&ul1);
if(ret==SOCKET_ERROR){
closesocket(sock);
return 0;
}
istate=true;
return 1;
}
}
int MyConnect::my_send(char ssbuf[512],int len)
{
//检查网络连接
if(istate==false)
{
cout<<"SYSTEM>> NETWORK HAS NOT BE CONNECTED!"<<endl;
return 0;
}
//如果没有分配缓冲区则分配之,分配后缓冲区内字符初始化为0
if(buff==NULL)
{
buff=new char[256];
for(int i=0;i<256;i++)
buff[i]=0;
}
WSAStartup(MAKEWORD(1,1),&wsd);
//输入要传送的字符串,并写入缓冲区
//string s;
//cout<<"SYSTEM>> INPUT THE CHARACTERS TO SEND:"<<endl;
// cin>>s;
int j;
for(j=0;j<len;++j)
buff[j]=ssbuf[j];
//传送缓冲区字符

int netState=send(sock,buff,len,0);

if(netState!=-1) {//cout<<"SYSYTEM>> SEND SUCCESS!"<<endl;
return 1;}
  
return 0;}
void MyConnect::my_receive(char ssbuf[512])
{
//查看网络是否连接
if(istate==false)
{
cout<<"SYSTEM>> NETWORK HAS NOT BE CONNECTED!"<<endl;
}
//如果没有分配缓冲区则分配之
else
{
if(buff==NULL)
{
buff = new char[256];
}
for(int i=0;i<256;i++)
buff[i]=0;
WSAStartup(MAKEWORD(1,1),&wsd);

int nNetTimeout=1000;//1秒
       Sleep(500);
        setsockopt(sock,SOL_SOCKET, SO_RCVTIMEO, (char *)&nNetTimeout, sizeof(int)); recv(sock,buff,256,0);
//cout<<"SYSTEM>> RECEIVE CORRECTLY!"<<endl;
//cout<<"SYSTEM>> HERE ARE THE CHARACTERS RECEIVED:"<<endl;
for(int j=0;j<256;j++)
ssbuf[j]=buff[j];
}
}
void MyConnect::my_disconnect()
{
closesocket(sock);
WSACleanup();
if(buff!=NULL)
{
delete [] buff;
// cout<<"\nBUFFER IS DELETEED!"<<endl;
buff=NULL;
}
// cout<<"\nDISSCONNECT SUCCESS!"<<endl; 
istate=false;
}
MyConnect::~MyConnect()
{
 if(buff!=NULL)
  delete [] buff;
 buff=NULL;
}JNIEXPORT jint JNICALL Java_Cmdresv_onsend
  (JNIEnv * env, jclass, jstring ip , jint port, jbyteArray sbuf, jint len)
{
MyConnect con1;
const char *ipp = env->GetStringUTFChars( ip, 0);

if(con1.my_connect(ipp,port))
{


            jbyte *arr = env->GetByteArrayElements(sbuf, 0);
            char ssbuf[512];
char rbuf[512];
            memcpy(&ssbuf,arr,len);
            
con1.my_send(ssbuf,len);
 rbuf[4]=1;
     con1.my_receive(rbuf);
 if((rbuf[4]==16)&&(rbuf[0]==126)&&(rbuf[1]==0)&&(rbuf[2]==0)&&(rbuf[3]==9))
             {memcpy(arr,&rbuf,256);
          env->SetByteArrayRegion(sbuf,0,256,arr);
              ssbuf[3]=(char)170;
              ssbuf[6]=(char)171;
          con1.my_send(ssbuf,len);  }
Sleep(300);
con1.my_disconnect();
return 1;
}
Sleep(300);
con1.my_disconnect();

return 0;}