使用 C语言 socket 编写接收和发送
时间: 2024-09-11 21:02:40 浏览: 41
在C语言中,使用socket进行网络通信涉及到创建socket、绑定地址、监听端口、接受连接、发送数据以及接收数据等步骤。以下是使用C语言通过socket进行数据接收和发送的一个基本示例。
创建socket:
```c
#include <sys/socket.h>
int sockfd = socket(AF_INET, SOCK_STREAM, 0); // 创建一个IPv4 TCP套接字
```
绑定地址和端口:
```c
#include <netinet/in.h>
#include <arpa/inet.h>
struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET; // 使用IPv4地址
server_addr.sin_addr.s_addr = htonl(INADDR_ANY); // 接受任何IP地址
server_addr.sin_port = htons(8080); // 使用12345作为端口号
bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)); // 绑定套接字地址
```
监听端口:
```c
listen(sockfd, 128); // 监听连接请求,最多监听队列长度为128个请求
```
接受连接:
```c
struct sockaddr_in client_addr;
socklen_t client_addr_len = sizeof(client_addr);
int conn_sock = accept(sockfd, (struct sockaddr *)&client_addr, &client_addr_len); // 接受连接
```
发送数据:
```c
const char *message = "Hello, Client!";
send(conn_sock, message, strlen(message), 0); // 发送数据给客户端
```
接收数据:
```c
#define BUFFER_SIZE 1024
char buffer[BUFFER_SIZE];
recv(conn_sock, buffer, BUFFER_SIZE, 0); // 从客户端接收数据
```
关闭socket:
```c
close(conn_sock); // 关闭与客户端的连接
close(sockfd); // 关闭监听socket
```
这个过程是一个非常简化的TCP服务器端的示例,实际应用中可能需要处理更多的细节,例如错误处理、非阻塞操作、多线程或异步IO等。
阅读全文