看到别人写的一个基于UDP的实例程序,可是别人运行的结果和我运行的结果总是不对,对方用的是WIN2000,我是XP。
服务器代码如下:
#include <Winsock2.h>
#include <stdio.h>void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 2, 2 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}

if ( LOBYTE( wsaData.wVersion ) != 2 ||
        HIBYTE( wsaData.wVersion ) != 2 ) {
WSACleanup( );
return; 
} SOCKET socksev=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrsev;
addrsev.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrsev.sin_family=AF_INET;
addrsev.sin_port=htons(6432); bind(socksev,(SOCKADDR *)&addrsev,sizeof(SOCKET)); SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
char recvBuf[100]; recvfrom(socksev,recvBuf,100,0,(SOCKADDR *)&addrClient,&len);
printf("%s\n",recvBuf);
closesocket(socksev);
WSACleanup();
}
实例演示的时候,程序运行到:recvfrom(socksev,recvBuf,100,0,(SOCKADDR *)&addrClient,&len);时应该等客户联接的到来,然后再运行:printf("%s\n",recvBuf);进行打印输出,而我在运行调试的时候,客户程序根本就没有起动,服务一执行就打印出一段乱码来,为什么会这样,recvfrom(socksev,recvBuf,100,0,(SOCKADDR *)&addrClient,&len);应该要等待有客户的联接时应该再往下执行的嘛,可是我的客户端并没有运行服务端他怎么就一下子运行到低呢!请那位高手指点!谢谢!客户端代码:
#include <Winsock2.h>
#include <stdio.h>void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 2, 2 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}

if ( LOBYTE( wsaData.wVersion ) != 2 ||
        HIBYTE( wsaData.wVersion ) != 2 ) {
WSACleanup( );
return; 
}
SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrsev;
addrsev.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrsev.sin_family=AF_INET;
addrsev.sin_port=htons(6432);
sendto(sockClient,"Hello",strlen("Hello")+1,0,(SOCKADDR *)&addrsev,sizeof(SOCKADDR));
closesocket(sockClient);
WSACleanup();
}
如果要调试运行,请加上动态联接库:ws2_32.lib