c++的socket监听不到http客户端的请求,试了很多遍,和书上代码一样的就是监听不到绝望了
你把代码贴出来啊,既然是监听不到就是代码有问题
我想用ServerSocket监听一个端口,然后通过在浏览器中输入http://localhost:port/的方式访问这个server。有没有谁遇到过这样的问题?
参考一下这段代码,我试过了,可以用
#include
#pragma comment(lib,"WS2_32")
WSADATA swadata;
WORD sockVersion=MAKEWORD(2,0);//winsock的版本2.0
WSAStartup(sockVersion,&swadata);//初始化WInsock库,swadata返回库的信息
SOCKET s=::socket(AF_INET,SOCK_STREAM,0);
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(8078);
sin.sin_addr.S_un.S_addr= htonl(INADDR_ANY);//作为服务器,bind本地的IP地址上进行监听,但是机器上可能有多块网卡,
//也就有多个IP地址,这时候你要选择绑定在哪个IP上面,如果指定为INADDR_ANY,那么系统将绑定默认的网卡【即IP地址】。
if(::bind(s,(SOCKADDR*)&sin,sizeof(sin))==SOCKET_ERROR)
{
// CString Cerr = WSAGetLastError();
AfxMessageBox("bind is failed");
::WSACleanup(); //在完成对请求的Socket库的使用后,要调用WSACleanup函数来解除与Socket库的绑定并且释放Socket库所占用的系统资源
//system("pause");
return false;
}
AfxMessageBox("bind is successful !\n");
//监听模式
if(::listen(s,2)==SOCKET_ERROR)
{
AfxMessageBox("listen is failed!\n");
::WSACleanup();
//system("pause");
return false;
}
AfxMessageBox("listen is succeed!\n");
sockaddr_in addrlink;
int Len=sizeof(addrlink);
char anser[]="HTTP/1.1 200 OK\r\n\r\n<html><head><title></title></head><body>yours</body></html>\r\n";
char buf[1024];
SOCKET client;
while(1)
{
client=::accept(s,(SOCKADDR*)&addrlink,&Len);
if(client==INVALID_SOCKET)
{
AfxMessageBox("accept is failed!");
::closesocket(client);
continue;
}
int n;
n=::recv(client,buf,1024,0);
buf[n]='\0';
CString cStr;
cStr.Format(" %s",buf);
AfxMessageBox(cStr);
::send(client,anser,strlen(anser),0);
}
::closesocket(s);
::WSACleanup();
return TRUE;
}
是在虚拟机上跑的代码吗?注意一下网段是否相同