首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

SOCKET客户端可以connect一次,发送接收屡次吗

2013-04-02 
SOCKET客户端可以connect一次,发送接收多次吗?SOCKET客户端可以connect一次,发送接收多次吗?下面代码已经W

SOCKET客户端可以connect一次,发送接收多次吗?
SOCKET客户端可以connect一次,发送接收多次吗?下面代码已经WSAStartup()

客户端代码:
sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr(ip);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(2200);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
start=true;
while(1)
{
char* recvBuf=new char[500];
ZeroMemory(recvBuf,500);
int recvcount=recv(sockClient,recvBuf,500,0);
if((strlen(recvBuf)>0)&&(recvcount!=0)&&(recvcount!=SOCKET_ERROR))
{
char* text=new char[GetWindowTextLength(GetDlgItem(hWnd,IDC_EDIT1))+500];
GetWindowText(GetDlgItem(hWnd,IDC_EDIT1),text,GetWindowTextLength(GetDlgItem(hWnd,IDC_EDIT1))+500);
strcat(text,recvBuf);
Sleep(300);
SetWindowText(GetDlgItem(hWnd,IDC_EDIT1),text);
SetForegroundWindow(hWnd);
delete[] text;
text=NULL;
}

delete[] recvBuf;
recvBuf=NULL;
//closesocket(sockClient);
}


服务端代码:

HWND hWnd = AfxGetMainWnd()->m_hWnd;
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD( 2, 2 );
WSAStartup( wVersionRequested, &wsaData );
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
    addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(2200);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
listen(sockSrv,5);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
//
start=true;
fd_set fdSocket;        // 所有可用套节字集合
FD_ZERO(&fdSocket);
FD_SET(sockSrv, &fdSocket);
while(1)
{
fd_set fdRead = fdSocket;
int nRet = ::select(0, &fdRead, NULL, NULL, NULL);
if(nRet>0)
{
if(FD_ISSET(sockSrv, &fdRead))
{
sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
//::AfxMessageBox("已经ACCEPT!");
FD_SET(sockConn, &fdSocket);
}
else
{
char* recvBuf=new char[500];
ZeroMemory(recvBuf,500);
int recvcount=recv(sockConn,recvBuf,500,0);
if(recvcount>0)
{
char* text=new char[GetWindowTextLength(GetDlgItem(hWnd,IDC_EDIT1))+500];
GetWindowText(GetDlgItem(hWnd,IDC_EDIT1),text,GetWindowTextLength(GetDlgItem(hWnd,IDC_EDIT1))+501);
strcat(text,recvBuf); 
Sleep(300);
SetWindowText(GetDlgItem(hWnd,IDC_EDIT1),text);
SetForegroundWindow(hWnd);
delete[] text;
text=NULL;
}
else
{
closesocket(sockConn);
FD_CLR(sockConn, &fdSocket);
FD_SET(sockSrv, &fdSocket);
}
}
}


这段代码,只能发送或者接收一次,请问是不是客户端每次发送或接收都要connect?如果这样,那会不会对服务端造成压力?
我服务端的代码有问题吗?
[解决办法]
结贴把

热点排行