gpt4 book ai didi

C 套接字 - 从端口监听,现在如何发送回端口?

转载 作者:行者123 更新时间:2023-11-30 15:46:51 25 4
gpt4 key购买 nike

我正在使用 C 语言的套接字创建一个 Web 代理。基本上,我监听给定的端口号,从中接收 HTML 请求,发出请求,然后将收到的内容发送回其来源位置。

我已经完成了第一部分。我能够读取请求并将其发送到必要的网络服务器,然后得到有效的响应。我只是不确定如何将该响应发送到请求的端口。

(我正在使用 Netcat 测试我的代码以发出请求并获取响应,而目前 Netcat 并未打印我尝试发送的响应。)

这是我的相关代码:

struct sockaddr_in port;
bzero((char *) &port, sizeof(port));
port.sin_family = AF_INET;
port.sin_port = htons(atoi(argv[1]));
port.sin_addr.s_addr = INADDR_ANY;
int socket;
int acceptSocket;
char response[RESPONSE_SIZE];

socket = Socket(AF_INET, SOCK_STREAM, 0);
Bind(socket, (struct sockaddr *) &port, sizeof(port));
Listen(socket, 0);
acceptSocket = Accept(socket, NULL, NULL);

if (acceptSocket >= 0)
printf("Connection open on port %s\n", argv[1]);

if (!ForwardHTTPRequest(acceptSocket, response))
printf("Forward error\n");

shutdown(socket, 0);
Connect(socket, (struct sockaddr *) &port, sizeof(port));
Send(socket, response, strlen(response), 0);

最后三行是我尝试发回响应的尝试。我关闭套接字的读取端,连接以发送,然后发送。但这并没有产生任何回应。

最佳答案

acceptSocket 是您在建立 session 时用于通信的套接字。只需在关闭套接字之前向该套接字发送一条消息即可。

关闭控制套接字是不常见的,除非您完全确定您不想再处理任何请求。服务器的基本工作流程是:

create listensocket
bind listensocket
while working:
worksocket = accept listensocket
read and write to worksocket as much as you want
close worksocket
shutdown/close listensocket

(不过,为了响应能力,在 worksocket 上完成的实际工作被分配给不同的线程或进程,以便服务器无需等待即可处理后续请求)。

关于C 套接字 - 从端口监听,现在如何发送回端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17959903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com