写一个使用Socket监听指定网络端口的C++代码片段(基于Linux操作系统)
时间: 2023-09-16 12:05:40 浏览: 204
### 回答1:
使用 Socket 在 C 语言中监听指定网络端口的代码片段如下:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(int argc, char *argv[])
{
// 监听的端口
int port = 8080;
// 创建 socket
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("socket error");
exit(1);
}
// 绑定端口
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY; // 监听所有网卡的请求
addr.sin_port = htons(port);
if (bind(sockfd, (struct sockaddr*)&addr, sizeof(addr)) < 0) {
perror("bind error");
exit(1);
}
// 开始监听
if (listen(sockfd, 10) < 0) {
perror("listen error");
exit(1);
}
// 等待客户端的连接
struct sockaddr_in client_addr;
socklen_t client_addr_len = sizeof(client_addr);
int client_sockfd = accept(sockfd, (struct sockaddr*)&client_addr, &client_addr_len);
if (client_sockfd < 0) {
perror("accept error");
exit(1);
}
// 处理客户端的请求
// ...
// 关闭 socket
close(client_sockfd);
close(sockfd);
return 0;
}
```
在上面的代码中,首先使用 `socket` 函数创建了一个 socket,然后使用 `bind` 函数将其绑定到指定的端口上。接着,使用 `listen` 函数开始监听端口,并使用 `accept` 函数等待客户端的连接。最后,使用 `close` 函数关闭 socket。
希望上面的代
### 回答2:
下面是一个使用Socket监听指定网络端口的C代码片段(基于Linux操作系统):
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main() {
int serverSocket, clientSocket;
struct sockaddr_in serverAddress, clientAddress;
int portNumber = 1234; // 要监听的端口号
// 创建套接字
serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (serverSocket < 0) {
perror("套接字创建失败");
exit(1);
}
// 设置服务器地址
memset(&serverAddress, 0, sizeof(serverAddress));
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = htonl(INADDR_ANY);
serverAddress.sin_port = htons(portNumber);
// 将套接字绑定到指定端口
if (bind(serverSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) < 0) {
perror("绑定套接字失败");
exit(1);
}
// 监听连接请求
if (listen(serverSocket, 5) < 0) {
perror("监听失败");
exit(1);
}
printf("服务器正在监听端口 %d\n", portNumber);
// 接受客户端连接请求
socklen_t clientAddressLength = sizeof(clientAddress);
clientSocket = accept(serverSocket, (struct sockaddr*)&clientAddress, &clientAddressLength);
if (clientSocket < 0) {
perror("接受连接失败");
exit(1);
}
// 从客户端接收数据
char buffer[1024];
memset(buffer, 0, sizeof(buffer));
ssize_t bytesRead = read(clientSocket, buffer, sizeof(buffer) - 1);
if (bytesRead < 0) {
perror("读取数据失败");
exit(1);
}
printf("接收到来自客户端的数据:%s\n", buffer);
// 向客户端发送响应数据
char response[] = "这是服务器的响应数据";
ssize_t bytesSent = write(clientSocket, response, strlen(response));
if (bytesSent < 0) {
perror("发送数据失败");
exit(1);
}
printf("响应数据已发送给客户端\n");
// 关闭套接字
close(clientSocket);
close(serverSocket);
return 0;
}
```
该代码片段使用C语言编写,基于Linux操作系统。首先创建一个套接字,然后设置服务器地址并将套接字绑定到指定的端口。然后使用listen函数开始监听连接请求。接着使用accept函数接受客户端的连接请求,并通过read函数接收来自客户端的数据。在接收数据后,通过write函数向客户端发送响应数据。最后关闭套接字。
### 回答3:
在Linux操作系统下,使用C语言编写一个使用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, new_socket, valread;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[1024] = {0};
const int PORT = 8888;
// 创建套接字
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
// 设置套接字选项
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
perror("setsockopt failed");
exit(EXIT_FAILURE);
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
// 绑定套接字
if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
// 监听端口
if (listen(server_fd, 3) < 0) {
perror("listen failed");
exit(EXIT_FAILURE);
}
printf("Listening on port %d...\n", PORT);
// 接受连接
if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {
perror("accept failed");
exit(EXIT_FAILURE);
}
// 读取客户端的消息
valread = read(new_socket, buffer, 1024);
printf("Received message: %s\n", buffer);
return 0;
}
```
以上代码实现了一个使用Socket监听指定网络端口的简单服务器。首先,创建一个Socket套接字,并设置套接字选项。然后,绑定套接字到指定端口,并开始监听该端口。最后,当有客户端连接时,接受连接并读取客户端发送的消息。
这段代码中监听的端口为8888,可以根据实际需求进行修改。另外,代码中只处理了一个客户端的连接和消息读取,如果需要处理多个客户端连接,可以使用循环结构来接受多个连接,并在子进程或线程中处理每个连接的消息。
阅读全文