##该版本在版本一基础上增加了服务器反馈功能,实现了服务器接收成功后给客户端发送接收成功消息。在vc6.0下即可运行成功
//windows下socket服务器程序
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
int main(void)
{
WSADATA wsa; //声明一个变量
WSAStartup(MAKEWORD(2,2),&wsa); //初始化
SOCKET serverSocket;
serverSocket = socket(AF_INET,SOCK_DGRAM,0);
struct sockaddr_in myaddr;
myaddr.sin_family = AF_INET;
myaddr.sin_port = htons(8000);
myaddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(serverSocket,(struct sockaddr *)&myaddr,sizeof(struct sockaddr));
char buf[1024];
int len;
len = sizeof(myaddr);
printf("start listen...");
while(1)
{
recvfrom(serverSocket,buf,sizeof(buf),0,(struct sockaddr*)&myaddr,&len);
printf("%s\n",buf);
char msg[1024]="receive success";
sendto(serverSocket,msg,sizeof(msg),0,(struct sockaddr *)&myaddr,len);
}
WSACleanup();
//关闭
return 0;
}
//windows下socket客户端程序
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
int main(void)
{
WSADATA wsa;
WSAStartup(MAKEWORD(2,2),&wsa);
SOCKET clientSocket;
clientSocket = socket(AF_INET,SOCK_DGRAM,0);
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_port = htons(8000);
bind(clientSocket,(struct sockaddr *)&addr,sizeof(addr));
char buf[1024];
int len1;
len1=sizeof(addr);
while(1)
{
printf("please send message:\n");
scanf("%s",buf);
sendto(clientSocket,buf,strlen(buf)+1,0,(struct sockaddr *)&addr,len1);
char msg[1024];
recvfrom(clientSocket,msg,sizeof(msg),0,(struct sockaddr*)&addr,&len1);
printf("%s\n",msg);
}
WSACleanup();
return 0;
}