C语言实现服务器socket编程代码
时间: 2023-05-26 14:06:53 浏览: 68
以下是一个简单的C语言实现服务器socket编程的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <unistd.h>
#define PORT 8080
#define MAX_CONNECTIONS 5
int main(int argc, char *argv[]) {
struct sockaddr_in server_addr, client_addr;
int server_fd, client_fd;
int addrlen = sizeof(server_addr);
// create a socket
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
// prepare the server address
memset(&server_addr, 0, addrlen);
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(PORT);
// bind the socket to the server address
if (bind(server_fd, (struct sockaddr *)&server_addr, addrlen) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
// listen for incoming connections
if (listen(server_fd, MAX_CONNECTIONS) < 0) {
perror("listen failed");
exit(EXIT_FAILURE);
}
printf("Server listening on port %d...\n", PORT);
// accept incoming connections and handle requests
while (1) {
int client_sock_addr_len = sizeof(client_addr);
if ((client_fd = accept(server_fd, (struct sockaddr *)&client_addr,
(socklen_t *)&client_sock_addr_len)) < 0) {
perror("accept failed");
exit(EXIT_FAILURE);
}
char buffer[1024] = {0};
int valread = read(client_fd, buffer, 1024);
printf("Received message: %s\n", buffer);
char *hello = "Hello from server";
send(client_fd, hello, strlen(hello), 0);
printf("Message sent\n");
close(client_fd);
}
return 0;
}
```
该代码包括以下步骤:
1. 创建一个服务器socket。
2. 准备服务器地址并将socket绑定到该地址。
3. 监听传入的连接请求。
4. 接受传入的连接请求并处理请求。
在处理请求期间,服务器会读取客户端发送的消息并打印该消息,然后发送一条简单的响应消息,告诉客户端已经收到了它的消息。最后,服务器关闭与客户端的连接。