在Linux环境下编写一个TCP Socket程序,通常涉及以下几个步骤:创建套接字、绑定地址、监听连接、接受连接、发送和接收数据以及关闭连接,下面我将详细解释每个步骤,并提供相应的代码示例。
创建套接字
需要使用socket()
函数创建一个套接字,这个函数需要三个参数:地址族(AF_INET表示IPv4)、套接字类型(SOCK_STREAM表示TCP)和协议(通常为0,表示默认协议)。
int sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { perror("ERROR opening socket"); exit(1); }
绑定地址
创建套接字后,需要将套接字绑定到一个地址和端口上,这通过bind()
函数实现,它需要一个指向sockaddr_in
结构的指针,该结构包含了要绑定的IP地址和端口号。
struct sockaddr_in serv_addr; memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; // 自动填充本机IP serv_addr.sin_port = htons(12345); // 设置端口号 if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { perror("ERROR on binding"); close(sockfd); exit(1); }
监听连接
绑定地址后,服务器需要开始监听来自客户端的连接请求,这通过listen()
函数实现,它需要一个队列长度参数,指定可以挂起的最大连接数。
listen(sockfd, 5);
接受连接
当有客户端尝试连接时,服务器需要接受这个连接,这通过accept()
函数实现,它返回一个新的套接字文件描述符,用于与客户端通信。
struct sockaddr_in cli_addr; socklen_t clilen = sizeof(cli_addr); int newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); if (newsockfd < 0) { perror("ERROR on accept"); close(sockfd); exit(1); }
发送和接收数据
一旦建立了连接,就可以使用send()
和recv()
函数来发送和接收数据。
char buffer[256]; bzero(buffer, 256); int n = read(newsockfd, buffer, 255); if (n < 0) perror("ERROR reading from socket"); printf("Here is the message: %sn", buffer); n = write(newsockfd, "I got your message", 18); if (n < 0) perror("ERROR writing to socket");
关闭连接
通信完成后,需要关闭套接字以释放资源。
close(newsockfd); close(sockfd);
就是在Linux环境下使用C语言编写TCP服务器的基本步骤,希望这些信息对你有所帮助!
到此,以上就是小编对于linux socket tcp程序的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。
本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/85781.html