none
Socket问题:客户端Send方法成功发送数据,但服务器端要等到客户端关闭了Socket连接之后才收到数据,为何? RRS feed

  • 问题

  • 用C# Socket类编写的一个简单的聊天程序,测试正常,在多个用户处使用也正常,可是最近碰到一个用户,却出现无法使用的问题。

    经过一番调试,发现问题关键在:

    客户端程序Connect成功,服务器Accept成功,接着客户端Send方法发送数据成功,并且返回了实际发送的字节数。但服务器端的BeginReceive方法一直收不到数据。用网络抓包工具监控过,也发现服务器的确是没有收到客户端的数据。

    但神奇的是,如果此时客户端将Socket连接关闭(例如退出程序),服务器那边就马上收到这些数据了!但由于此时客户端Socket已经关闭,所以也做不了其他事情。

     

    我在编程中,服务器端的程序都是使用异步方法(Bind - Listen - BeginAccept - BeginReceive),而客户端使用的是同步的“Send”方法来发送数据,请问这个有影响吗?



    • 已编辑 liubin 2011年11月24日 3:47
    2011年10月16日 18:00

全部回复