linux网络编程(4)基于TCP的服务器端程序 小咪咪 2022-05-22 03:43 156阅读 0赞 下面是服务端的程序代码,客户端连接成功后服务器将打印出客户端的地址信息,并将服务器本地的时间发送给客户端: #include <netdb.h> #include <sys/socket.h> #include <time.h> #include <unistd.h> #include <memory.h> #include <signal.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <arpa/inet.h> int sockfd; void sig_handler(int signo) { if(signo == SIGINT) { printf("server close!\n"); /*关闭socket*/ close(sockfd); exit(1); } } /*输出客户端连接的地址信息*/ void out_addr(struct sockaddr_in *clientaddr) { //将端口从网络字节序转换成主机字节序 int port = ntohs(clientaddr->sin_port); char ip[16]; memset(ip, 0, sizeof(ip)); //将IP地址从网络字节序转换为点分十进制 inet_ntop(AF_INET, &clientaddr->sin_addr.s_addr, ip, sizeof(ip)); printf("client: %s(%d) connected\n", ip, port); } //服务器发送数据给客户端 void do_service(int fd) { //获取系统时间 long t = time(0); char *s = ctime(&t); size_t size = strlen(s)*sizeof(char); //将服务器端获取的系统时间写回到客户端 if(write(fd, s, size) != size) { perror("write error"); } } int main(int argc, char* argv[]) { if(argc < 2) { printf("usage: %s #port\n", argv[0]); exit(1); } if(signal(SIGINT, sig_handler) == SIG_ERR) { perror("signal sigint error"); exit(1); } /*1.创建socket * 注:socket创建在内核中,是一个结构体 * AF_INET:IPV4 * SOCK_STREAM:tcp协议 * */ sockfd = socket(AF_INET, SOCK_STREAM, 0); if(sockfd == -1) { perror("socket error"); exit(1); } /*2.将socket和地址(ip、port)进行绑定*/ struct sockaddr_in serveraddr; memset(&serveraddr, 0, sizeof(serveraddr)); //地址中填入ip、port、internet地质族类型 serveraddr.sin_family = AF_INET; serveraddr.sin_port = htons(atoi(argv[1]));//转换为网络字节序 serveraddr.sin_addr.s_addr = htons(INADDR_ANY);//响应所有的网卡请求 if(bind(sockfd, (struct sockaddr*)(&serveraddr), sizeof(serveraddr)) < 0)//注意地址要强制转换为通用地址 { perror("bind error"); exit(1); } /*3.调用listen函数启动监听(指定的端口监听) * 通知系统去接收来自客户端的连接请求 * (将接收到的客户端的请求放置到对应的队列中) *第二个参数:指定队列的长度 * */ if(listen(sockfd, 10) < 0) { perror("listen error"); exit(1); } /*4.调用accept函数从队列中获取一 * 个客户端的请求连接,并返回一个新的socket描述符 * 第二个参数:用来获取客户端的地址信息,如果不需要传入NULL * 注意:若没有客户端连接,调用此函数会阻塞。 * */ struct sockaddr_in clientaddr; socklen_t clientaddr_len = sizeof(clientaddr); while(1) { int fd = accept(sockfd, (struct sockaddr*)&clientaddr, &clientaddr_len); if(fd < 0) { perror("accept error"); continue; } /*5.调用IO函数和连接的客户端进行双向的通信 * */ out_addr(&clientaddr); do_service(fd); /*6.关闭socket * */ close(fd); } return 0; }
相关 Java网络编程:服务器端的TCP连接问题 在Java中进行网络编程,特别是在处理服务器端的TCP连接时,可能会遇到以下几种问题: 1. **创建Socket对象**: - 错误:`Socket s = new 淡淡的烟草味﹌/ 2024年09月10日 23:18/ 0 赞/ 22 阅读
相关 基于UDP/TCP实现客户端服务器的网络通信程序 目录: 前言 基于UDP实现客户端服务器的网络通信程序 基于TCP实现客户端服务器的网络通信程序 -------------------- 前言 我会带着你远行/ 2024年03月27日 11:53/ 0 赞/ 35 阅读
相关 UNIX网络编程笔记(4)—TCP客户/服务器程序示例 TCP客户/服务器程序示例 这一章信息量开始大起来了,粗略来看它实现了简单的TCP客户/服务器程序,里面也有一些费解的细节。 1.概述 完整的TCP客户/服务器程 - 日理万妓/ 2022年08月23日 00:45/ 0 赞/ 129 阅读
相关 socket编程-- 基于TCP协议的网络程序 [socket编程-- 基于TCP协议的网络程序][socket_-- _TCP] 下图是基于TCP协议的客户端/服务器程序的一般流程: TCP协议通讯流程 [! 快来打我*/ 2022年08月01日 11:21/ 0 赞/ 189 阅读
相关 linux网络编程(7)基于多线程的TCP服务器与客户端编程 服务器端: include <netdb.h> include <sys/socket.h> include <time.h> i ╰半夏微凉°/ 2022年05月22日 07:51/ 0 赞/ 160 阅读
相关 linux网络编程(6)基于多进程的TCP服务器与客户端编程 服务器端: include <netdb.h> include <sys/socket.h> include <time.h> i 淩亂°似流年/ 2022年05月22日 05:11/ 0 赞/ 181 阅读
相关 linux网络编程(5)基于TCP的客户端程序 include <unistd.h> include <netdb.h> include <sys/socket.h> include <std ╰半橙微兮°/ 2022年05月22日 03:53/ 0 赞/ 148 阅读
相关 linux网络编程(4)基于TCP的服务器端程序 下面是服务端的程序代码,客户端连接成功后服务器将打印出客户端的地址信息,并将服务器本地的时间发送给客户端: include <netdb.h> include 小咪咪/ 2022年05月22日 03:43/ 0 赞/ 157 阅读
相关 Java网络编程4---TCP程序设计 Java TCP程序设计 在`Java`中使用`Socket`(即套接字)完成`TCP`程序的开发,使用此类可以方便的建立可靠的,双向的,持续的,点对点的通信连接。 落日映苍穹つ/ 2022年05月20日 05:06/ 0 赞/ 171 阅读
还没有评论,来说两句吧...