如何在Linux下使用Socket编写TCP程序?

在Linux环境下编写一个TCP Socket程序,通常涉及以下几个步骤:创建套接字、绑定地址、监听连接、接受连接、发送和接收数据以及关闭连接,下面我将详细解释每个步骤,并提供相应的代码示例。

如何在Linux下使用Socket编写TCP程序?插图1

创建套接字

需要使用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()函数实现,它需要一个队列长度参数,指定可以挂起的最大连接数。

如何在Linux下使用Socket编写TCP程序?插图3

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");

关闭连接

通信完成后,需要关闭套接字以释放资源。

如何在Linux下使用Socket编写TCP程序?插图5

close(newsockfd);
close(sockfd);

就是在Linux环境下使用C语言编写TCP服务器的基本步骤,希望这些信息对你有所帮助!

到此,以上就是小编对于linux socket tcp程序的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。

本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/85781.html

小末小末
上一篇 2024年10月27日 14:40
下一篇 2024年10月27日 14:57

相关推荐