在linux平台用C语言编写一个socket服务端示例代码
时间: 2023-09-05 22:08:05 浏览: 45
好的,以下是一个简单的 C 语言代码示例,用于在 Linux 平台上编写一个 socket 服务端:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(){
int server_fd, client_fd;
struct sockaddr_in server_addr, client_addr;
socklen_t client_len;
char buffer[1024];
// 创建 socket 对象
server_fd = socket(AF_INET, SOCK_STREAM, 0);
if(server_fd == -1){
perror("socket");
exit(EXIT_FAILURE);
}
// 初始化 server 地址结构体
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(8888);
// 绑定端口号
if(bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1){
perror("bind");
exit(EXIT_FAILURE);
}
// 监听端口号
if(listen(server_fd, 5) == -1){
perror("listen");
exit(EXIT_FAILURE);
}
printf("服务器启动,监听端口号:8888\n");
while(1){
// 接受客户端连接请求
client_len = sizeof(client_addr);
client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &client_len);
if(client_fd == -1){
perror("accept");
continue;
}
printf("客户端 %s:%d 已连接\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
// 接收客户端数据
memset(buffer, 0, sizeof(buffer));
if(read(client_fd, buffer, sizeof(buffer)) == -1){
perror("read");
continue;
}
printf("接收到客户端 %s:%d 的消息:%s\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port), buffer);
// 发送数据给客户端
if(write(client_fd, "Hello, Client!", strlen("Hello, Client!")) == -1){
perror("write");
continue;
}
close(client_fd);
printf("客户端 %s:%d 已断开连接\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
}
close(server_fd);
return 0;
}
```
这个程序会在本机上的 8888 端口上监听,并且每次接收到一个客户端连接请求,就会向客户端发送一条欢迎信息,并且关闭连接。