socket的服务器/客户端已经连接,但是一send/recv就出错。为何?该怎么处理
socket的服务器/客户端已经连接,但是一send/recv就出错。为何?
我写了一对非常简单的socket服务器端和客户端,代码如下。先启动服务端再启动客户端。
可是一连上,两端就报错,send error和recv error.
这是为什么呢? 高人帮忙教一下哈!
服务端:
客户端:
------解决方案--------------------
服务器端发的太快了,Sleep一下
------解决方案--------------------
if(SOCKET_ERROR == send(hAccSocket,"Hi",3,0) ){
------解决方案--------------------
------解决方案--------------------
我写了一对非常简单的socket服务器端和客户端,代码如下。先启动服务端再启动客户端。
可是一连上,两端就报错,send error和recv error.
这是为什么呢? 高人帮忙教一下哈!
服务端:
- C/C++ code
int _tmain(int argc, _TCHAR* argv[]) { WSADATA wsa; if(0!=WSAStartup(MAKEWORD(2,2),&wsa))return 1; SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//IPPROTO_TCP和0的区别在哪里? if(sockSrv==INVALID_SOCKET)return 1; SOCKADDR_IN sAddr; sAddr.sin_family=AF_INET; sAddr.sin_port =htons(34567); sAddr.sin_addr.S_un.S_addr =htonl(INADDR_ANY); if(SOCKET_ERROR == bind( sockSrv, (LPSOCKADDR)&sAddr, sizeof( SOCKADDR )))return 1; if(SOCKET_ERROR == listen(sockSrv,0))return 1;//backlog的作用是什么? int cbAddr = sizeof(SOCKADDR); while(1){ SOCKET hAccSocket = accept(sockSrv, (SOCKADDR*)&sAddr, &cbAddr ); if(hAccSocket==INVALID_SOCKET)return 1; printf("Accepted!\n"); while(1){ if(SOCKET_ERROR == send(sockSrv,"Hi",3,0) ){ printf("send error\n"); break; } printf("data sent\n"); } closesocket(hAccSocket); } WSACleanup(); return 0; }
客户端:
- C/C++ code
int _tmain(int argc, _TCHAR* argv[]) { WSADATA wsaData; if(0!=WSAStartup(MAKEWORD(2,2), &wsaData ))return 1; SOCKET hClient=socket(AF_INET,SOCK_STREAM,0); if(hClient==INVALID_SOCKET)return 1; SOCKADDR_IN sAddr; sAddr.sin_family=AF_INET; sAddr.sin_port =htons(34567); sAddr.sin_addr.S_un.S_addr =inet_addr("127.0.0.1"); if( SOCKET_ERROR==connect( hClient, (LPSOCKADDR)&sAddr, sizeof(SOCKADDR) ) )return 1; while(1){ char buf[10]={0}; if(0>=recv(hClient,buf,10,0)){ printf("recv error\n"); break; } printf("received %s\n",buf); Sleep(5000); } closesocket(hClient); WSACleanup(); return 0; }
------解决方案--------------------
服务器端发的太快了,Sleep一下
------解决方案--------------------
if(SOCKET_ERROR == send(hAccSocket,"Hi",3,0) ){
------解决方案--------------------
------解决方案--------------------
- C/C++ code
if(SOCKET_ERROR == send(sockSrv,"Hi",3,0) ){ printf("send error\n"); break;