1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
#include <stdlib.h> #include <stdio.h> #include <winsock2.h> #include <string.h> #include "conio.h" #include <time.h>
#define BUFLEN 2000 #define WSVERS MAKEWORD(2, 2) #pragma comment(lib,"ws2_32.lib")
int main(int argc, char* argv[]) { char* host = (char*)"127.0.0.1"; char* service = (char*)"50500"; struct sockaddr_in sin; struct sockaddr_in from; int fromsize = sizeof(from); char buf[BUFLEN + 1]; SOCKET sock; int cc; char temp_buf[BUFLEN+1];
WSADATA wsadata; WSAStartup(WSVERS, &wsadata); sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons((u_short)atoi(service)); bind(sock, (struct sockaddr*)&sin, sizeof(sin)); printf("服务器已开启!!!\n\n");
while (!_kbhit()) { cc = recvfrom(sock, buf, BUFLEN, 0, (SOCKADDR*)&from, &fromsize); buf[cc] = '\0'; if (buf[4] == '\0' && !strcmp(buf, "exit")) {
printf("服务器关闭!!!"); closesocket(sock); WSACleanup(); getchar(); return 0; }
if (cc == SOCKET_ERROR) { printf("recvfrom() failed; %d\n", WSAGetLastError()); break; } else if (cc == 0) break; else { char* pts; time_t now; (void)time(&now); pts = ctime(&now); sprintf(temp_buf, "接收到的信息:%s\n收到的时间:%s客户端的IP地址:%u.%u.%u.%u\n客户端的端口号:%hu\n" , buf , pts , from.sin_addr.S_un.S_un_b.s_b1 , from.sin_addr.S_un.S_un_b.s_b2 , from.sin_addr.S_un.S_un_b.s_b3 , from.sin_addr.S_un.S_un_b.s_b4 , from.sin_port ); printf("%s\n", temp_buf); cc = sendto(sock, temp_buf, BUFLEN, 0, (SOCKADDR*)&from, sizeof(from)); } } closesocket(sock); WSACleanup(); getchar(); }
|