internet clientSocket控件连接请求发出的很慢,可以调吗?

LJN 2002-03-28 11:30:50

打开连接后过几十秒server才收到connect请求,同台机器用vc的CSocket类
Server却几乎实时响应。

是不是有那里需要调。
...全文
117 20 打赏 收藏 举报
写回复
20 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
常宁 2002-03-31
在M$的主页上有,MSDN上也应该有,主要是Windows Socket不支持的特性,包括IPv6还有一些其他的,以及各种windows之间的兼容性问题。
UNIX比较标准,但是不支持一些Windows特性,比如NetBios风格的机器名。异步通讯等等(Select不是异步的)所以如果MSDN比较完全,这个应该能够找到
  • 打赏
  • 举报
回复
francohe 2002-03-30
事实上,在使用Socket时如果用属性HOST进行通信的确比用Address慢。问题就在于DNS。我做过下面的试验(建议大家也做做),分别捕捉以上两种通信方式时的IP包,你会发现使用HOST时,就会先给网关发送IP包,估计是要获取域名解释,这样一来就浪费了很多时间;而使用Address时就没有这种情况,所以就会很多!
大家讨论讨论吧!
  • 打赏
  • 举报
回复
常宁 2002-03-30
我还是建议大家看看 cofa2000(阿里)的意见,他的提出的问题是存在的,特别是对windows->unix的时候
  • 打赏
  • 举报
回复
常宁 2002-03-30
to yeqiufeng(叶秋枫)
那时你个人的理解,事实上TCustomSocket封装的是Windows的异步Socket,是直接调用API的并没有实现任何的特殊TCP栈(这是因为这个,TCustomSocket不能再linux上用,因此出现了BCB6的TTCPServer/TTCPClient类),因此你的想法是不正确的。这里的兼容性问题不可能存在。
  • 打赏
  • 举报
回复
常宁 2002-03-30
to invalid(空心菜)
看来你对Socket还不甚了解,须知有些东西是Unix不具备而Windows增加了
有些则是Windows不支持但unix支持,建议你看看unix和Windows的兼容列表,对你有好处。DNS对于CScoket还是TCustomSocket一视同仁,不会一个慢一个快的。
  • 打赏
  • 举报
回复
invalid 2002-03-30
tcp协议是跟机器和操作系统无关的。不会产生unix和windows很慢的现象。肯定其它的原因,如dns配置等等。
  • 打赏
  • 举报
回复
invalid 2002-03-30
unix和windows兼容列表哪里有呢?
请redpower指点...
  • 打赏
  • 举报
回复
常宁 2002-03-30
to francohe(小熊)
DNS慢是正常的,但不正常的是有人说CSocket快,而TCustomSocket慢,两个封装API东西不可能相差很多!!!特别是TCustomSocket是标准的非阻塞模式,而CSocket仅仅是准非阻塞模式。而正常情况下,不管什么模式连接应该速度相同,发送效率应该非阻塞大于阻塞,我测试的情况TCustomSocket比CSocket快1个数量级。
  • 打赏
  • 举报
回复
invalid 2002-03-29
我用控件,对unix也很快啊?
windows是个成熟的系统,这些网络方面的关键技术,不会这么差吧。
  • 打赏
  • 举报
回复
我不懂电脑 2002-03-29
我用的Api很快呀。
  • 打赏
  • 举报
回复
常宁 2002-03-29
cofa2000(阿里)说得没有错,如果对端是UNIX,可能会慢得不可忍受。这是Windows的问题,CSocket封装相当简单,如果用CSocket取得主机名或其他的东西,所需要的时间不会比TCustomSocket短。
TCustomSocket是对WinSocket封装最好的类了,对UNIX封装最好的可能是Indy公司的TTCPServer/TTcpClient类了
  • 打赏
  • 举报
回复
LJN 2002-03-28
server和client都在本地,根本没出去。

而且同台机器用vc的CSocket类却几乎实时响应
  • 打赏
  • 举报
回复
invalid 2002-03-28
跟网关和dns有关系吧,你直接指定对方ip地址,应该很快。
也可以写在本地hosts中。
  • 打赏
  • 举报
回复
cofa2000 2002-03-28
上面有错!不好意思

你是不是在Connect的事件中有类似以下的语句:
void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket)
{
String HostName;

……

HostName = ClientSocket1->Host; //得到连接机器的机器名

……
}
如果是这样的话就会很慢,这是因为ClientSocket1->Host不是一个简单的
变量,而是执行了类里的一个程序,它从新去网络中搜索主机名,因此很慢。
实际上它已经连接上了。你可以跟踪一下了解载个过程。
要解决这个问题,可以删掉这段代码(如果连接机器的机器名不是很重要的话)或者将ClientSocket1->Host改为ClientSocket1->Address;

望你能成功
  • 打赏
  • 举报
回复
cofa2000 2002-03-28
你是不是在Connect的事件中有类似以下的语句:
void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket)
{
String HostName;

……

HostName = Socket->Host; //得到连接机器的机器名

……
}
如果是这样的话就会很慢,这是因为Socket->Host不是一个简单的变量,
而是执行了类里的一个程序,它从新去网络中搜索主机名,因此很慢。
实际上它已经连接上了。你可以跟踪一下了解载个过程。
要解决这个问题,可以删掉这段代码(如果连接机器的机器名不是很重要的话)或者将Socket->Host改为Socket->Address;

望你能成功
  • 打赏
  • 举报
回复
invalid 2002-03-28
机器速度不会造成如此大的影响,肯定是其它问题。
  • 打赏
  • 举报
回复
LJN 2002-03-28

我在另一台机器上试的ClientSock速度很快,看来是机器问题。

不过为什么在慢机器上vc的CSocket类同样快呢?
  • 打赏
  • 举报
回复
「已注销」 2002-03-28
不对

我刚刚测试了一下

就算是 8888

也很快的

在此我强烈提醒贴主一点

写这种程序 你不能单纯认为 客户端发出请求慢

而应该综合考虑 比如 你为什么不认为服务端监听这种请求比较弱智呢

我不太熟悉底层 但我知道MS的winsock和BCB的这个ClientSock的确就存在这种扯皮现象

服务端就说 你太懒了 怎么还不发请求

客户端就说 你是聋子 我请求早就发出去了

这实际上是一种兼容现象引发的问题

至少 BCB自己的服务端控件和客户端控件连接非常的快

>>个人在这上面吃过亏 才说出这些 仅供参考

@_@
  • 打赏
  • 举报
回复
LJN 2002-03-28
其实你们想的太复杂了,程序非常简单

client->port = 8888;
client->host = "127.0.0.1";
client->open

就是这么简单。因为我发现速度慢,所以写了这个最简单的客户端。

服务器就在本机上,不存在任何解析网关等问题。
当服务器一发现连接请求,马上提示出来。

可就是这个最简单的客户端完成上述代码需20秒。
当我用vc的CSocket类时需0.1秒。
  • 打赏
  • 举报
回复
「已注销」 2002-03-28
是的

直接指定IP快很多

不过我估计是你程序写的欠完善

因为我屡试不爽

就算是在Internet上 连接速度也非常快的

除非有防火墙 或者对方网络太慢

至于在本地(自己机器上) 和在局域网内

更是非常的快

建议你把你的有关代码贴上来 让大家帮你看看

@_@
  • 打赏
  • 举报
回复
相关推荐
发帖
茶馆
加入

538

社区成员

C++ Builder 茶馆
社区管理员
  • 茶馆
申请成为版主
帖子事件
创建了帖子
2002-03-28 11:30
社区公告
暂无公告