C语言编程用于网络主要依赖于 套接字(Socket)的概念和相关的系统调用。套接字是应用层与TCP/IP协议族通信的中间软件抽象层,它提供了一组简单的接口来发送和接收数据。以下是一些基本的步骤和代码示例,帮助你在C语言中实现网络编程:
创建套接字
使用`socket()`函数创建一个套接字,指定协议族(如AF_INET表示IPv4协议)、套接字类型(如SOCK_STREAM表示TCP,SOCK_DGRAM表示UDP)和协议(通常为0,表示使用默认协议)。
绑定地址
使用`bind()`函数将套接字与特定的IP地址和端口号关联起来。这通常在服务器端进行,以便知道数据应该发送到哪个地址和端口。
监听连接
服务器端使用`listen()`函数来监听绑定的端口,等待客户端的连接请求。
接受连接
服务器端使用`accept()`函数来接受客户端的连接请求,这将会创建一个新的套接字用于实际的数据传输。
数据传输
一旦连接建立,可以使用`read()`和`write()`函数(或`recv()`和`send()`函数)在客户端和服务器之间传输数据。
关闭套接字
完成通信后,使用`close()`函数关闭套接字以释放资源。
示例代码
服务器端代码:
```c
include include include include include include define PORT 8080 define BUFFER_SIZE 1024 int main() { int server_fd, client_fd, addr_len; struct sockaddr_in server_addr, client_addr; char buffer[BUFFER_SIZE]; // 创建套接字 if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) { perror("socket failed"); exit(EXIT_FAILURE); } // 设置服务器地址 server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = htons(PORT); // 绑定套接字 if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { perror("bind failed"); exit(EXIT_FAILURE); } // 监听连接 if (listen(server_fd, 3) < 0) { perror("listen"); exit(EXIT_FAILURE); } addr_len = sizeof(client_addr); // 接受连接 if ((client_fd = accept(server_fd, (struct sockaddr *)&client_addr, (socklen_t *)&addr_len)) < 0) { perror("accept"); exit(EXIT_FAILURE); } // 读取并打印客户端发送的数据 read(client_fd, buffer, BUFFER_SIZE); printf("Received from client: %s\n", buffer); // 向客户端发送数据 send(client_fd, "Hello from server!", strlen("Hello from server!"), 0); printf("Message sent to client\n"); // 关闭套接字 close(client_fd); close(server_fd); return 0; } ``` 客户端代码: