socket tcp
时间: 2025-01-25 19:06:44 浏览: 22
Socket TCP 编程概述
在网络编程领域,Socket 是一种用于不同主机之间通信的技术。对于TCP协议而言,它提供了一种可靠的、面向连接的服务[^3]。
创建TCP服务器端程序
创建一个简单的TCP服务器通常涉及以下几个方面:
初始化服务器套接字
首先需要调用socket()
函数来创建一个新的套接字描述符,该操作指定了地址族(AF_INET表示IPv4)、类型(SOCK_STREAM代表流式套接字即TCP)以及特定于协议的信息(IPPROTO_TCP指定传输层使用的具体协议为TCP)。
#include <sys/types.h>
#include <sys/socket.h>
int sockfd;
if ((sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
perror("socket error");
}
绑定本地地址信息
接着要绑定这个新建立起来的套接字到某个具体的网络接口上,并设置监听端口号以便客户端能够找到并连接上来。这一步骤通过结构体struct sockaddr_in
完成配置工作之后再传递给bind()
系统调用来实现。
#include <netinet/in.h>
struct sockaddr_in server_addr;
memset(&server_addr, '\0', sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(sockfd, (struct sockaddr *)&server_addr,sizeof(struct sockaddr))<0){
perror("bind failed");
}
开始监听来自外部的请求
当一切准备就绪以后就可以让操作系统知道我们愿意接受新的连接尝试了——这就是所谓的“进入被动打开状态”。此时会设定最大排队长度参数作为未处理完毕之前可以等待的最大请求数量限制;而实际接收到来自远端发起者的握手信号则由后续步骤负责处理。
listen(sockfd , MAX_CLIENTS);
接受客户机发出的新连接
每当有新的连接到达时,accept()
将会返回一个新的文件描述符专门服务于此次对话过程中的数据交换活动。这里需要注意的是每次成功获取到有效链接后都应该开启独立线程或进程去单独管理这条线路以免阻塞主线程继续响应其他潜在来访者。
while(1){
int new_socket;
if((new_socket= accept(sockfd,(struct sockaddr*)&address,&addrlen))<0){
perror("accept");
exit(EXIT_FAILURE);
}
// 处理新连接...
}
数据读写操作
一旦建立了成功的双向通道,则可以通过标准I/O库提供的API来进行消息发送(send()
)和接收(recv()
)动作,在此期间还可能涉及到缓冲区大小调整等问题需视具体情况灵活应对。
char buffer[BUFFER_SIZE];
read(new_socket , buffer, BUFFER_SIZE);
printf("%s\n",buffer );
write(new_socket,"Hello from Server" , strlen("Hello from Server"));
以上就是构建最基础版本TCP服务端所需经历的主要环节介绍[^2]。
相关推荐


















