简单时间服务器 网络编程:UDP循环服务器

网络编程:UDP循环服务器(简单时间服务器) 写在前面的话
循环服务器指对于客户端的连接,服务器处理完一个之后接着处理另一个 。即串行处理 。要熟悉代码流程,这是最简单的服务器模式 。参考教材:Linux网络编程 。
题目(功能) 服务端:接收客户端时间请求,返回本地时间客户端:发送时间请求,接收客户端返回的时间并打印 服务端代码
#include #include #include #include #include #include #include #define PORT 12355int main(int argc, char *argv[]){//套接字struct sockaddr_in addr_serv, addr_clie;int s = socket(AF_INET, SOCK_DGRAM, 0);if (s < 0){printf("socket err.\n");return -1;}socklen_t len = sizeof(addr_clie);//收发缓冲区char buf[1024];//初始化服务端地址memset(&addr_serv, 0, sizeof(addr_serv));addr_serv.sin_family = AF_INET;addr_serv.sin_port = htons(PORT);addr_serv.sin_addr.s_addr = htonl(INADDR_ANY);//套接字绑定地址int b = bind(s, (struct sockaddr *)&addr_serv, sizeof(addr_serv));if (b < 0){printf("bind err.\n");return -1;}while (1){memset(buf, 0, 1024);int n = recvfrom(s, buf, 1024, 0, (struct sockaddr *)&addr_clie, &len);//判断收发数据的合法性if (n > 0 && !strncmp(buf, "TIME", 4)){memset(buf, 0, 1024);time_t now = time(NULL);sprintf(buf, "%24s\r\n", ctime(&now));sendto(s, buf, 1024, 0, (struct sockaddr *)&addr_clie, len);}}close(s);return 0;}
客户端代码
#include #include #include #include #include #include #define PORT 12355int main(int argc, char *argv[]){//服务器地址struct sockaddr_in addr_serv;//收发缓冲区char buf[1024];// UDP套接字int s = socket(AF_INET, SOCK_DGRAM, 0);if (s < 0){printf("socket err.\n");return -1;}//初始化服务端地址memset(&addr_serv, 0, sizeof(addr_serv));addr_serv.sin_family = AF_INET;addr_serv.sin_port = htons(PORT);addr_serv.sin_addr.s_addr = htonl(INADDR_ANY);//将数据写道bufmemset(buf, 0, 1024);strcpy(buf, "TIME");//发送数据sendto(s, buf, strlen(buf), 0, (struct sockaddr *)&addr_serv, sizeof(addr_serv));memset(buf, 0, 1024);//接收数据socklen_t len = sizeof(addr_serv);int n = recvfrom(s, buf, 1024, 0, (struct sockaddr *)&addr_serv, &len);//打印消息if (n > 0){printf("TIME:%s", buf);}//关闭fdclose(s);return 0;}
测试结果
【简单时间服务器网络编程:UDP循环服务器】可以看到实现了基本功能 。