大哥们,帮帮忙看c++的socket监听不到http客户端的请求

c++的socket监听不到http客户端的请求,试了很多遍,和书上代码一样的就是监听不到绝望了

0

4个回答

你把代码贴出来啊,既然是监听不到就是代码有问题

0
weixin_30707621
黑涩感觉 手机发不了代码。。。。
大约 2 年之前 回复

我想用ServerSocket监听一个端口,然后通过在浏览器中输入http://localhost:port/的方式访问这个server。有没有谁遇到过这样的问题?

0

参考一下这段代码,我试过了,可以用
#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;  

}

0
weixin_30707621
黑涩感觉 我用c++的客户端可以访问,但用netstat命令查不到监听的端口
大约 2 年之前 回复
weixin_30707621
黑涩感觉 http://127.0.0.18000/aaa http://192.168.1.1008000 http://localhost8000/aaa 都试过了就是收不到请求
大约 2 年之前 回复
weixin_30707621
黑涩感觉 谢谢了
大约 2 年之前 回复
kidults
kidults 回复黑涩感觉: 你用浏览器请求的方式对不对
大约 2 年之前 回复
weixin_30707621
黑涩感觉 代码和你这差不多,我用c++的客户端就可以监听到请求,浏览器发送的http请求就收不到,防火墙也关了
大约 2 年之前 回复

是在虚拟机上跑的代码吗?注意一下网段是否相同

0
weixin_30707621
黑涩感觉 没用虚拟机,防火墙也关了,用c++的客户端就能监听到,不知道是不是浏览器设置问题
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!