linux 网络接受数据
时间: 2024-09-29 22:08:15 浏览: 50
在Linux系统中,网络数据接收通常涉及套接字编程。套接字是网络通信的基本机制,它提供了一个端点,应用程序可以用来发送和接收数据。当一个程序创建一个监听套接字并将其设置为监听模式时,它可以等待来自其他主机的数据连接。
当有新连接请求时,操作系统会调用指定的回调函数(通常是`recvfrom()`、`accept()`等),在此过程中,程序从套接字读取数据。`recvfrom()`函数接收指定大小的数据,并返回接收的实际字节数,同时还会提供发送方的地址信息(如果适用)。
例如,一个简单的TCP服务器可能会这样做:
```bash
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main() {
int server_socket = socket(AF_INET, SOCK_STREAM, 0);
// ... 设置服务器地址和端口
bind(server_socket, ...);
listen(server_socket, SOMAXCONN); // 监听连接
struct sockaddr_in client_addr;
socklen_t addr_len = sizeof(client_addr);
int new_socket = accept(server_socket, (struct sockaddr*)&client_addr, &addr_len);
char buffer[1024];
ssize_t bytes_received = recvfrom(new_socket, buffer, sizeof(buffer), 0, NULL, NULL);
if (bytes_received > 0) {
printf("Received %zd bytes from %s\n", bytes_received, inet_ntoa(client_addr.sin_addr));
// 处理接收到的数据...
}
close(new_socket);
return 0;
}
```
在这个例子中,服务器接受客户端的数据,并打印出接收的内容和客户端的IP地址。
阅读全文