刚刚接触socket通讯,很多问题不明白。
这是个简单例子,我是在这个基础上改的
#include
#pragma comment( lib, "Ws2.lib" )
void TestSocketServer( void )
{
WSADATA wsaData;
if (WSAStartup(0x0202, &wsaData)!=0)
{
return;
}
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(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
listen(sockSrv,5);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
while(1)
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
char sendBuf[50];
sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[50];
recv(sockConn,recvBuf,50,0);
closesocket(sockConn);
}
}
这个程序原理很简单,但能实现基本功能。能一直响应客户端,且客户端更换IP地址后也能连接到服务器端,但是每次收发完都会自动与客户端断开连接。
想问一下有没有什么办法能够避免收发结束后与客户端断开连接。且客户端发送断开命令后,再发送连接请求仍然能够连接上,改变客户端IP地址也不影响呢。
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
如果把这句放在while前,虽然能够与客户端一直连接,但是当客户端断开以后,再重新连接就会出现问题,因为之前的sockConn还存在
希望高手指教