我正在使用C中的套接字制作Web代理。基本上,我听一个给定的端口号,从中接收HTML请求,发出请求,然后将返回的内容发送回去。
我已经开始工作了。我能够读入请求并将其发送到必要的Web服务器,并且得到有效的响应。我只是不确定如何将响应发送到要求它的端口。
(我正在使用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
是用于建立会话的通信的套接字。只需在关闭套接字之前在该套接字上发送一条消息即可。
关闭控制套接字是不寻常的,除非您完全确定不想再处理其他请求。服务器的基本工作流程是:
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 - C套接字-从端口监听,现在如何发送回去?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17959903/