SOCKET 连接 www.163.com 80,每次连接都成功了,而且最后也send成功,就是
接收不到东西啊??得到163主页的内容都是空的。我是ADSL拨号上网的,SOCKET直接连接方式,每次启动程序防火墙都提示是否放行。
放行的ip是我的dns.
SOCKET sClient;
sClient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sClient == INVALID_SOCKET)
{
AfxMessageBox("Create Socket Error");
return;
}
char buffer[1024] ={0};
char bufferlen = 1024;
server.sin_family=AF_INET;
server.sin_port=htons(m_DestPort);
DWORD ip;
//in_addr goal=GetIpByHost((char*)(LPCTSTR)m_DestAddr);
int len;
unsigned long addr = inet_addr( (char*)(LPCTSTR)m_DestAddr);
in_addr hst = GetIpByHost( (char*)(LPCTSTR)m_DestAddr);
server.sin_addr.s_addr = hst.S_un.S_addr;
if(connect(sClient,(sockaddr *)&server,sizeof(server))==SOCKET_ERROR)
{
AfxMessageBox("connect error");
return;
}
sprintf(buffer,"GET / HTTP/1.0\nHost:%s\n\n",m_DestAddr);
int ret=send(sClient,buffer,strlen(buffer),0);
if(ret==SOCKET_ERROR)
{
ShowLastError("send()");
closesocket(sClient);
return;
}
while(1)
{
AfxMessageBox("OK2");
ret=recv(sClient,buffer,bufferlen,0);
if(ret==SOCKET_ERROR)
{
break;
}
if(ret==0)
break;
buffer[ret]='\n';
m_GetHTTP.ReplaceSel(buffer,FALSE);
}
closesocket(sClient);
AfxMessageBox("成功");
return ;
接收不到东西啊??得到163主页的内容都是空的。我是ADSL拨号上网的,SOCKET直接连接方式,每次启动程序防火墙都提示是否放行。
放行的ip是我的dns.
SOCKET sClient;
sClient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sClient == INVALID_SOCKET)
{
AfxMessageBox("Create Socket Error");
return;
}
char buffer[1024] ={0};
char bufferlen = 1024;
server.sin_family=AF_INET;
server.sin_port=htons(m_DestPort);
DWORD ip;
//in_addr goal=GetIpByHost((char*)(LPCTSTR)m_DestAddr);
int len;
unsigned long addr = inet_addr( (char*)(LPCTSTR)m_DestAddr);
in_addr hst = GetIpByHost( (char*)(LPCTSTR)m_DestAddr);
server.sin_addr.s_addr = hst.S_un.S_addr;
if(connect(sClient,(sockaddr *)&server,sizeof(server))==SOCKET_ERROR)
{
AfxMessageBox("connect error");
return;
}
sprintf(buffer,"GET / HTTP/1.0\nHost:%s\n\n",m_DestAddr);
int ret=send(sClient,buffer,strlen(buffer),0);
if(ret==SOCKET_ERROR)
{
ShowLastError("send()");
closesocket(sClient);
return;
}
while(1)
{
AfxMessageBox("OK2");
ret=recv(sClient,buffer,bufferlen,0);
if(ret==SOCKET_ERROR)
{
break;
}
if(ret==0)
break;
buffer[ret]='\n';
m_GetHTTP.ReplaceSel(buffer,FALSE);
}
closesocket(sClient);
AfxMessageBox("成功");
return ;
解决方案 »
- 为按钮添加消息响应,不成功,求指导啊!
- 80分送上 熟悉图像处理的高手们帮忙
- 虚拟空间问题
- 为什么recv无法接收到返回帧
- 只有10分了,为什么CRecordSet的open返回值为1(正常的打开了), 可是却无法addnew()却出现了无法当前数据库为只读模式的错误提示。
- 求界面设计高手,给钱
- 天啊,怎么办,CSOCKET中send(setbuf,20000)返加正确值,receive(receivebuf,20000),竟然要分成几段接收,怎么办啊大哥
- 如何改变Edit控件的背景颜色?
- 双缓冲画图的问题
- Win98下两个没有亲缘关系的进程间通讯有哪几种方法?
- 请教:彩色位图 转 单色黑白位图 代码?
- c++builder写客户端调用由Java写服务端的WebService问题? 发布到Tomcate中
谁来看看啊?很简单的,
难道GetIpByHost得到是DNS的IP???
改变了Send中的内容也一样反馈不回来。我用sniffer跟踪ie发送的数据包,然后把自己发送的数据包也一样发给www.163.com,
就是取不到东西阿。 怎么ie就可以呢??奇怪。
改为
int bufferlen = 1024;因为用char只截取8个字节,即0x400后的0
导致ret=recv(sClient,buffer,bufferlen,0);
传入的bufferlen为0,自然得不到数据了
http://community.csdn.net/Expert/TopicView1.asp?id=3889162
领分