本次实验利用UDP协议, 语言环境为 C/C++
利用套接字Socket编程,实现Server/CLient 之间简单的通讯。
结果应为类似所示:
下面贴上代码(参考参考...)
Server 部分:
1 /* UDPServer.cpp */ 2 3 #include <stdlib.h> 4 #include <stdio.h> 5 #include <winsock2.h> 6 #include <string.h> 7 #include "conio.h" 8 #include <time.h> 9 10 #define BUFLEN 2000 // 缓冲区大小 11 #define WSVERS MAKEWORD(2, 2) // 指明版本2.2 12 #pragma comment(lib,"ws2_32.lib") // 加载winsock 2.2 Llibrary 13 14 /*------------------------------------------------------------------------ 15 * main - TCP client for DAYTIME service 16 *------------------------------------------------------------------------ 17 */ 18 void 19 main(int argc, char *argv[]) 20 { 21 char *host = "127.0.0.1"; /* server IP Address to connect */ 22 23 char *service = "5050"; /* server port to connect */ 24 struct sockaddr_in sin; /* an Internet endpoint address */ 25 struct sockaddr_in from; /* sender address */ 26 int fromsize = sizeof(from); 27 char buf[BUFLEN+1]; /* buffer for one line of text */ 28 char buf1[BUFLEN+1]; 29 SOCKET sock; /* socket descriptor */ 30 int cc; /* recv character count */ 31 32 char *pts; 33 time_t now; 34 35 WSADATA wsadata; 36 WSAStartup(WSVERS, &wsadata); /* 加载winsock library,WSVERS为请求版本,wsadata返回系统实际支持的最高版本。 */ 37 sock = socket(PF_INET, SOCK_DGRAM,IPPROTO_UDP); // 创建UDP套接字, 参数:因特网协议簇(family),数据报套接字,UDP协议号, 返回:要监听套接字的描述符或INVALID_SOCKET 38 memset(&sin, 0, sizeof(sin)); 39 sin.sin_family = AF_INET; 40 sin.sin_addr.s_addr = INADDR_ANY; // 绑定(监听)所有的接口。 41 sin.sin_port = htons((u_short)atoi(service)); // 绑定指定接口。atoi--把ascii转化为int,htons -- 主机序(host)转化为网络序(network), 为short类型。 42 bind(sock, (struct sockaddr *)&sin, sizeof(sin)); // 绑定本地端口号(和本地IP地址) 43 44 (void) time(&now); // 取得系统时间 45 pts = ctime(&now); // 把时间转换为字符串 46 printf(" UDP(Server) Echo增强程序 "); 47 while(!_kbhit()){ //检测是否有按键 48 flag1: cc = recvfrom(sock, buf, BUFLEN, 0, (SOCKADDR *)&from, &fromsize); //接收客户数据。返回结果:cc为接收的字符数,from中将包含客户IP地址和端口号。 49 sprintf(buf1," 时间: %s Client【IP: %s 端口号: %d 】 数据: %s",pts,inet_ntoa(from.sin_addr),from.sin_port,buf); 50 if (cc == SOCKET_ERROR){ 51 printf("recvfrom() failed; %d ", WSAGetLastError()); 52 break; 53 } 54 else if (cc == 0) 55 break; 56 else{ 57 buf[cc] = '