为什么socket的server可以监听,socket的client不能监听呢?如果能!怎样编写代码?(30分)

  • 主题发起人 主题发起人 wanxu
  • 开始时间 开始时间
//socket的client不能监听???
从哪听的?胡说八道!
 
YB_unique:
怎样监听?愿闻其详!
 
不是我看错了,就是你写错了。
 
废话!如果client监听就不叫client了!
 
请说点有用的话!否则还不如不说!简直是浪费资源。。。。呜呼
 
不知您的“监听”指什么?
如果指的是Socket API的Listen( )函数,或Delphi的TServerSocket控件的listen(其实
两个是一样的,控件调用的也是Socket API。),那当然是只有Server才Listen,否则
如果Client也Listen的话,正如一个过客所说,Client就不叫Client,而叫Server了。

如果是UDP协议,则双方都不用Listen,因为UDP不是面向连接的。发送方在发送数据之前
无须建立连接,不用管接受方是否已经作好了接收准备,想发就可以发。
只有TCP协议才有Listen,因为TCP协议是面向连接的,在发送数据前必须先建立连接。
建立连接时有“主动打开”(active open)和“被动打开”(passive open)之分,“主动打开”者
即是Client,“被动打开”者即是Server,也就是在“Listen”的那一方。如果你说的“监听”
是这个意思,那当然Client没有listen。定义如此。
如果你想让Client也Listen,你在客户端再放一个ServerSocket(当然要用另一个端口)
让它也成为Server就是了。


 
好像没听说过!
 
在vb中socket控件只有一個﹐在delphi中只不過把它具體分開而已。
使用API Socket不就不分Server和Client了﹐用來監聽也就不是問
題了。
 
也许是FBI之类用的吧,用于窃听网络端口的东西,具体没有资料
 
to fnacy105:
>>“使用API Socket不就不分Server和Client了﹐用來監聽也就不是問題了”
此言差矣!你用过Socket API吗?(不好意思,说话有点不客气:)
“vb中socket控件只有一個”,只不过是把Server和Client合在一起而已。

而且Delphi中的TClientSocket和TServerSocket只能用来做TCP不能做UDP。


 
不知你用的是哪种控件,我分析,你可能用的是INDY的TCPCLIENT控件,他的客户端没有
自动接收功能,必须要用一个TIMER控件来接收,虽然感觉上效率会低一点,可其实有其它
协议内部也是这样实现的!
 
多人接受答案了。
 
后退
顶部