在Linux环境下进行TCP Socket编程,主要涉及以下几个步骤和接口:
TCP的Socket编程流程
(图片来源网络,侵删)
1、创建套接字:使用socket()
函数创建一个新的套接字。
2、绑定地址信息:通过bind()
函数将套接字与特定的IP地址和端口号绑定。
3、监听连接:服务端使用listen()
函数开始监听来自客户端的连接请求。
4、接受连接:通过accept()
函数接受已完成三次握手的连接。
5、数据传输:使用send()
和recv()
函数发送和接收数据。
(图片来源网络,侵删)
6、关闭连接:使用close()
函数关闭套接字。
TCP Socket的接口
函数 | 描述 |
socket() | 创建套接字。 |
bind() | 绑定套接字到特定地址。 |
listen() | 使套接字变为被动监听状态,准备接受连接。 |
accept() | 从已完成连接的队列中获取连接。 |
connect() | 建立到指定地址的连接。 |
send() | 发送数据。 |
recv() | 接收数据。 |
close() | 关闭套接字。 |
代码示例
以下是一个简单的TCP服务器和客户端的代码示例:
服务器端代码
(图片来源网络,侵删)
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #include <netinet/in.h> int main() { int sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sockfd < 0) { printf("Socket creation failed "); exit(EXIT_FAILURE); } struct sockaddr_in serv_addr; memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(8080); if (bind(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) { perror("Bind failed"); close(sockfd); exit(EXIT_FAILURE); } listen(sockfd, 10); struct sockaddr_in cli_addr; socklen_t clilen = sizeof(cli_addr); int newsockfd = accept(sockfd, (struct sockaddr*)&cli_addr, &clilen); if (newsockfd < 0) { perror("Accept failed"); close(sockfd); exit(EXIT_FAILURE); } char buffer[256]; int n = read(newsockfd, buffer, 255); if (n < 0) { perror("Read failed"); close(newsockfd); close(sockfd); exit(EXIT_FAILURE); } printf("Received message: %s ", buffer); n = write(newsockfd, "Hello from server", 16); if (n < 0) { perror("Write failed"); close(newsockfd); close(sockfd); exit(EXIT_FAILURE); } close(newsockfd); close(sockfd); return 0; }
客户端代码
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #include <netinet/in.h> int main() { int sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sockfd < 0) { printf("Socket creation failed "); exit(EXIT_FAILURE); } struct sockaddr_in serv_addr; memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); serv_addr.sin_port = htons(8080); if (connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) { perror("Connect failed"); close(sockfd); exit(EXIT_FAILURE); } const char* message = "Hello from client"; if (send(sockfd, message, strlen(message), 0) < 0) { perror("Send failed"); close(sockfd); exit(EXIT_FAILURE); } char buffer[256]; int n = read(sockfd, buffer, 255); if (n < 0) { perror("Read failed"); close(sockfd); exit(EXIT_FAILURE); } printf("Received message: %s ", buffer); close(sockfd); return 0; }
这些代码示例展示了如何在Linux环境下使用TCP协议进行基本的Socket编程。
以上内容就是解答有关socket tcp编程linux的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。
本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/72239.html