在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