问题是这样的:同一个程序几乎什么也没改,从不出结果就到了想要的结果,想知道原因呢
服务器端程序是这样的:#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”,为什么?

解决方案 »

  1.   

    看看socket,bind,recvfrom有没有返回错误
      

  2.   

    如果没有停顿,recvfrom会返回错误,你可以看看它的错误码是什么。
    int errCode = recvfrom(……)就可以取到错误码了
      

  3.   

    热心的网友,可不可以把qq或MSN留下呀。
      

  4.   

    在调用bind前面加上下面的代码,
    出现错误的原因是默认情况下一个socket只能使用一个地址。用下面的函数可以调用多个
    char opt  = 2;  
      setsockopt(sockSrv,  SOL_SOCKET,  SO_REUSEADDR,  &opt,  sizeof(opt));