云计算百科
云计算领域专业知识百科平台

实现简单的TCP服务器

首先我们先选择一个端口号用于 TCP 或 UDP 网络通信。如果你运行一个服务或应用程序,监听端口就是通过该端口接收来自客户端的请求。

这里我们选择2048

先在ubuntu系统中输入netstat -anop | grep 2048,会显示以下信息 在这里插入图片描述 这代表此时2048端口号没有被占用

我们在ubuntu系统中用c编写以下程序

#include <stdio.h> // 标准输入输出库,用于打印和输入
#include <sys/socket.h> // 套接字相关函数
#include <netinet/in.h> // 定义了 IP 协议族相关的常量和结构体
#include <string.h> // 字符串处理函数
#include <unistd.h> // 系统调用接口,包括 close 函数
#include <arpa/inet.h> // 提供了 IP 地址转换函数等

int main() {

// 创建一个 TCP 套接字,返回套接字描述符
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == 1) {

perror(\”socket\”);
return 1;
}

// 配置服务器端的地址结构
struct sockaddr_in serveraddr;
memset(&serveraddr, 0, sizeof(struct sockaddr_in)); // 初始化地址结构为零

serveraddr.sin_family = AF_INET; // 使用 IPv4 地址
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); // 绑定到任意 IP 地址
serveraddr.sin_port = htons(2048); // 绑定到端口 2048

// 将服务器端地址和端口绑定到套接字上
if (1 == bind(sockfd, (struct sockaddr*)&serveraddr, sizeof(struct sockaddr))) {

perror(\”bind\”);
return 1;
}

// 开始监听端口,最多允许 10 个连接排队
if (listen(sockfd, 10) == 1) {

perror(\”listen\”);
return 1;
}

// 等待客户端连接
struct sockaddr_in clientaddr;
socklen_t len = sizeof(clientaddr);
int clientfd = accept(sockfd, (struct sockaddr*)&clientaddr, &len); // 接受客户端连接
if (clientfd == 1) {

perror(\”accept\”);
return 1;
}
printf(\”Client connected\\n\”);

// 接收客户端数据
char buffer[128] = {
0}; // 缓冲区存放接收到的数据
int count = recv(clientfd, buffer, 128, 0); // 接收数据
if (count == 1) {

perror(\”recv\”);
close(clientfd);
return 1;
}

// 发送接收到的数据给客户端
send(clientfd, buffer, count, 0);

// 打印相关信息
printf(\”sockfd: %d, clientfd: %d, count: %d, buffer: %s\\n\”, sockfd, clientfd, count, buffer);

// 等待用户输入后关闭客户端连接
getchar();
close(clientfd); // 关闭客户端套接字

return 0; // 程序正常结束
}

代码解释:

  • 创建套接字:

    int sockfd = socket(AF_INET, SOCK_STREAM, 0);

    使用 socket() 创建一个 TCP 套接字。AF_INET 表示使用 IPv4 地址族,SOCK_STREAM 表示创建一个流式套接

  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » 实现简单的TCP服务器
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!