服务器端:
- #include <WINSOCK2.H>
- #include <stdio.h>
- void main()
- {
- //加载套接字库
- WORD wVersionRequest;
- WSADATA wsData;
- int err;
- wVersionRequest = MAKEWORD(1,1);
- err = WSAStartup(wVersionRequest,&wsData);
- if (err != 0)
- {
- return;
- }
- if (LOBYTE(wsData.wVersion) != 1 || HIBYTE(wsData.wVersion) != 1)
- {
- WSACleanup();
- 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));
- //创建数据缓冲区
- char recvBuf[100];
- char sendBuf[100];
- char tempBuf[200];
- SOCKADDR_IN addrClient;
- int len = sizeof(SOCKADDR);
- while (1)
- {
- //等待并接收数据
- recvfrom(sockSrv, recvBuf, 100, 0, (SOCKADDR*)&addrClient, &len);
- //对接收的数据进行判断
- if ('q' == recvBuf[0])
- {
- sendto(sockSrv, "q", strlen("q")+1, 0, (SOCKADDR*)&addrClient, len);
- printf("Chat end!\n");
- break;
- }
- sprintf(tempBuf, "%s say: %s", inet_ntoa(addrClient.sin_addr), recvBuf);
- printf("%s\n", tempBuf);
- //发送数据
- printf("Please input data:\n");
- gets(sendBuf);
- sendto(sockSrv, sendBuf, strlen(sendBuf)+1, 0, (SOCKADDR*)&addrClient, len);
- }
- //关闭套接字
- closesocket(sockSrv);
- WSACleanup();
- }
客户端:
- #include <WINSOCK2.H>
- #include <stdio.h>
- void main()
- {
- //加载套接字库
- WORD wVersionRequest;
- WSADATA wsData;
- int err;
- wVersionRequest = MAKEWORD(1,1);
- err = WSAStartup(wVersionRequest,&wsData);
- if (err != 0)
- {
- return;
- }
- if (LOBYTE(wsData.wVersion) != 1 || HIBYTE(wsData.wVersion) != 1)
- {
- WSACleanup();
- return;
- }
- //创建套接字
- SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);
- SOCKADDR_IN addrSrv;
- addrSrv.sin_family = AF_INET;
- addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
- addrSrv.sin_port = htons(6000);
- //创建数据缓冲区
- char recvBuf[100];
- char sendBuf[100];
- char tempBuf[200];
- int len = sizeof(SOCKADDR);
- while(1)
- {
- //发送数据
- printf("Please input data:\n");
- gets(sendBuf);
- sendto(sockClient, sendBuf, strlen(sendBuf)+1, 0, (SOCKADDR*)&addrSrv, len);
- //等待并接收数据
- recvfrom(sockClient, recvBuf, 100 ,0, (SOCKADDR*)&addrSrv, &len);
- if ('q' == recvBuf[0])
- {
- sendto(sockClient, "q", strlen("q")+1, 0, (SOCKADDR*)&addrSrv, len);
- printf("Chat end!\n");
- break;
- }
- sprintf(tempBuf, "%s say:%s", inet_ntoa(addrSrv.sin_addr), recvBuf);
- printf("%s\n", tempBuf);
- }
- //关闭套接字
- closesocket(sockClient);
- WSACleanup();
- }