Indy组件 TCPClient 访问 网页,该怎么解决
Indy组件 TCPClient 访问 网页百度IP 202.108.22.5,与服务端链接成功后,服务端发送百度首页的源代码,但是
Indy组件 TCPClient 访问 网页
百度IP 202.108.22.5,
与服务端链接成功后,服务端发送百度首页的源代码,但是客服端接收不到,一直跑空,如果服务端发送的是别的数据(123456)或者字符串(我我我我我我),接收正常
读取数据用的 TCPClient->ReadLn();
新手,望高人指导
[最优解释]
哪个IP地址换了?Server还是Client?
在TCPServer里更改属性影响到了TCPClient?
[其他解释]
双引号不是什么问题,用转义符反斜杠。
[其他解释]
你要这样做的,最简单的 IdTCPClient 获取 HTTP 页面内容
IdTCP->Host = "202.108.22.5";
IdTCP->Port = 80;
IdTCP->Connect();
IdTCP->IOHandler->WriteLn("GET " + S + " HTTP/1.1");
IdTCP->IOHandler->WriteLn("Host: " + IdTCP->Host);
IdTCP->IOHandler->WriteLn("Accept: text/html, */*");
IdTCP->IOHandler->WriteLn("Accept-Encoding: identity");
IdTCP->IOHandler->WriteLn("User-Agent: Mozilla/3.0 (compatible; Indy Library)");
IdTCP->IOHandler->WriteLn("Connection: Keep-Alive");
IdTCP->IOHandler->WriteLn();
bool HttpOK = false;
int ResponseLen = 0;
String S;
do
{
S = IdTCP->IOHandler->ReadLn();
if (S == "HTTP/1.1 200 OK") HttpOK = true;
else if (S.Pos("Content-Length:") == 1)
{
S.Delete(1, S.Pos(" "));
ResponseLen = S.ToIntDef(0);
}
}
while (S.Length());
if (HttpOK && ResponseLen)
{
S = IdTCP->IOHandler->ReadString(ResponseLen, TEncoding::Default);
// S 就是接收到的页面内容
}
[其他解释]把源码当成普通字符串发送,是不是有什么特殊字符
[其他解释]有双引号,如果有的话,该怎么修改
[其他解释]不是有idhttp控件吗
[其他解释]换个 IP 就不行了,报错 socket 10049,再换成之前的IP,先前的IP也不行了,报同样的错,网上说的端口或IP冲突我觉得都不像,我只是在IdTCPServer组件的属性Bindings里更改了一下,其他的都没动,然后把文件全删了,复制之前的,又好了
[其他解释]TCPServer 和 TCPClient 一同更改的
[其他解释]10049的意思是IP地址或端口无效,是不是服务器机器的IP地址没改过来?
这个错误发生在服务器端还是客户端,是在哪个环节?连接或是接收?
[其他解释]服务器端,服务器端代码里一点都没涉及IP地址和端口,只有一个Button的Click来激活TCPServer,然后就是OnExecute里的数据处理了,涉及IP地址和端口的地方只有Bindings和DefaultPort,我更改了IP地址(192.168.1.1变成192.168.2.107),端口一直是1026,只要一点击Button,服务器端就报 10049 ,很奇怪
------其他解决方案--------------------
电脑的IP我也相应的变化
[其他解释]服务器本机的ip地址是多少?如果不是192.168.2.107,那肯定绑定不上去
[其他解释]192.168.1.1时设置的是:
IP 地址:192.168.1.1
子网掩码:255.255.255.0
默认网关:192.168.1.1
这个单独试是可以的
192.168.2.107是设置:
IP 地址:192.168.2.107
子网掩码:255.255.255.0
默认网关:192.168.2.1
这个单独试也是可以的,第一种换成第二种就会报错,重新启动还是一样
[其他解释]什么情况下第一种换成第二种,是在程序运行过程中,服务器本机的IP地址发生变化,导致服务器程序报错?
[其他解释]是在程序关闭的情况下,更改服务端和客服端的IP
[其他解释]是不是再重新启动程序时,重新设置TCPServer中绑定的IP地址后,再启动TCPServer时出的错?
[其他解释]重新启动程序之前,服务端和客户端全都设置好了以后,才启动的
[其他解释]服务器IP地址更改后,TCPServer控件所绑定的IP地址也应相应重新设置,如果不重新设置,应该就会出10049错误,如果重新设置之后仍出这个错误,就可能是其它原因,不知你是哪种情况
[其他解释]谢谢了