问题是这样的:同一个程序几乎什么也没改,从不出结果就到了想要的结果,想知道原因呢
服务器端程序是这样的:#include "stdio.h"
#include "winsock2.h"
void main()
{
WORD wVersionRequested;
WSADATA wsdata;
int err;
wVersionRequested=MAKEWORD(1,1);
err=WSAStartup(wVersionRequested,&wsdata);
if(err!=0)
{
return;
}
SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,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)); SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
char recvBuf[100];
int i;
printf("hahawo\n"); recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
printf("%s\n",recvBuf);
printf("hahawo\n");
closesocket(sockSrv);
WSACleanup();
}客户端程序:#include "stdio.h"
#include "winsock2.h"
void main()
{ WORD wVersionRequested;
WSADATA wsdata;
int err;
wVersionRequested=MAKEWORD(1,1);
err=WSAStartup(wVersionRequested,&wsdata);
if(err!=0)
{
return;
}
SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000); sendto(sockClient,"Hello!",strlen("Hello!")+1,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
closesocket(sockClient);
WSACleanup();
}刚开始调试的时候,运行服务器端程序就直接打印两个“hahawo”,说明在recvfrom()处没有停顿,后来两端可以通信的时候,再运行服务器端程序就只出来一个“hahawo”,接到客户端请求的时候才打印第二个“hahawo”,为什么?
int errCode = recvfrom(……)就可以取到错误码了
出现错误的原因是默认情况下一个socket只能使用一个地址。用下面的函数可以调用多个
char opt = 2;
setsockopt(sockSrv, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));