【发布时间】:2015-03-09 21:49:27
【问题描述】:
我正在处理的问题是,在成功发送数据后,我收到了客户的第一个响应,但在他输入了他的详细信息并没有提交之后,我收到了第二个响应。 你知道为什么会这样吗? 这是我的代码:
sock->listenAndAccept();
string url="HTTP/1.1 302 Found \r\nContent-Type: text/html; charset=utf8 \r\nContent- Length:279\r\n\r\n<!DOCTYPE html><html><head><title>Creating an HTML Element</title></head><body><form name=\"input\" action=\"login.html\" method=\"get\">user name: <input type=\"text\" name=\"user\"><br>password: <input type=\"text\" name=\"password\"><input type=\"submit\" value=\"Submit\"></form></body></html>";
sock->send(url.data(),url.length());
char buffer[1000];
sock->recv(buffer, 1000);
cout<<buffer<<endl;
sock->recv(buffer, 1000);
cout<<buffer<<endl;
监听和接受功能:
TCPSocket* TCPSocket::listenAndAccept(){
int rc = listen(socket_fd, 1);
if (rc<0){
return NULL;
}
size_t len = sizeof(peerAddr);
bzero((char *) &peerAddr, sizeof(peerAddr));
int connect_sock = accept(socket_fd, (struct sockaddr *)&peerAddr,(unsigned int *)&len);
return new TCPSocket(connect_sock,serverAddr,peerAddr);
}
接收函数:
int TCPSocket::recv(char* buffer, int length){
return read(socket_fd,buffer,length);
}
【问题讨论】:
-
Content-和Length:之间的空格是怎么回事? -
另外,客户端是你写的吗?你怎么知道客户端正在发送响应? (我怀疑你的客户端是一个网络浏览器,它正在打开一个新的连接[这没有错])
-
我使用网络浏览器作为我的客户端
-
你不能。这就像在问“我如何确保如果我在两个不同的日子订购披萨,他们使用同一辆车?”。 (答案是,如果你关心你的披萨是在哪辆车上来的,那你就错了)
-
“那么你认为我需要在我的代码中改变什么” - 我认为你需要了解 HTTP 的工作原理,然后它就会很明显(你可能需要扔掉一部分它并重新开始)
标签: c++ sockets tcp client-server tcpsocket