以下代码均在VC6.0上调试通过。
服务器端代码:
//UDP server
//listen port 9102
//receive string and display it
//Visual C++ 6.0
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#define BUFLEN 1024
int main(void)
{
SOCKET soc;
SOCKADDR_IN addr;
char buf[BUFLEN];
int len;
WSADATA wsa;
WSAStartup(MAKEWORD(1,1),&wsa); //initial Ws2_32.dll by a process
memset(&addr, 0, sizeof(addr));
if((soc = socket(AF_INET,SOCK_DGRAM,0)) <= 0)
{
printf("Create socket fail!\n");
return -1;
}
addr.sin_family = AF_INET;
addr.sin_port = htons(9102);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(soc,(struct sockaddr *)&addr,sizeof(struct sockaddr))!=0)
{
printf("Bind fail!\n");
return -1;
}
len = sizeof(addr);
printf("start listen...\n");
while(1) {
recvfrom(soc, buf, BUFLEN, 0,(struct sockaddr*)&addr, &len);
printf("%s\n",buf);
}
WSACleanup(); //关闭
return 0;
}
//UDP client
//client send string to server
//Visual C++ 6.0
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#define BUFLEN 1024
int main(void)
{
SOCKET soc;
SOCKADDR_IN addr;
unsigned char buf[BUFLEN];
WSADATA wsa;
WSAStartup(MAKEWORD(2,2),&wsa); //initial Ws2_32.dll by a process
memset(&addr, 0, sizeof(addr));
if((soc = socket(AF_INET,SOCK_DGRAM,0)) <= 0)
{
printf("Create socket fail!\n");
return -1;
}
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_port = htons(9102);
bind(soc,(struct sockaddr *)&addr,sizeof(addr));
while(1) {
scanf("%s", buf);
sendto(soc, buf, strlen(buf)+1, 0, (struct sockaddr *)&addr, sizeof(addr));
}
WSACleanup(); //clean up Ws2_32.dll
return 0;
}