读书人

wince下的socket通讯有关问题

发布时间: 2013-10-23 11:39:13 作者: rapoo

wince下的socket通讯问题
刚刚接触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还存在
希望高手指教 socket wince 通讯
[解决办法]

引用:
Quote: 引用:

closesocket(sockConn);
这句话断开的吧,每次收不要断开。

我把这句话去掉试过了,去掉后如果客户端IP地址不发生改变,收发一次后虽然连接不断,但是不能接着收发数据。如果断开重新连,则正常


recv那边循环,
[解决办法]
if(recv(...)==-1){

closesocket(sockConn);
}

读书人网 >C++

热点推荐