UPD服务端的代码,稍微改下参数就可以用了
#include <iostream>
#include <Winsock2.h>
#include <Ws2tcpip.h>
#pragma comment(lib, "Ws2_32.lib")
using namespace std;
int main(void)
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1, 1);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
return -1;
}
if (LOBYTE(wsaData.wVersion) != 1 ||
HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup();
return -1;
}
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];
char str[INET_ADDRSTRLEN];
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);
cout << "Chat end!" << endl;
break;
}
sprintf_s(tempBuf, 200, "%s say: %s",
inet_ntop(AF_INET, &addrClient.sin_addr, str, sizeof(str)), len);
cout << tempBuf << endl;
cout << "Please input data: " << endl;
gets_s(sendBuf);
sendto(sockSrv, sendBuf, strlen(sendBuf) + 1, 0, (SOCKADDR*)&addrClient, len);
}
closesocket(sockSrv);
WSACleanup();
return 0;
}