在项目中遇到一个奇怪的问题,不知要如何解决,来这里请教各位高手大侠。
问题具体是这样的:
我用C#写了一个TcpClient客户端,需要1、建立链接,2、向服务端发送数据,3、读取服务器回复 4、然后关闭连接。
在执行时,建立 连接后,服务器端没有显示有连接上来,发送数据也没有报错。只有当这个方法运行完返回后,服务器端才真正收到连接请求,并接收到了数据。很奇怪这是为什么。因为我在第3步需要读取回复,这样的话,在第4步之后,才会有数据返回,因此就出错了。奇怪就奇怪在,这是一个共通方法,其它方法调用都没有问题,唯独其中一个业务方法调用有这现象,调用方式一样,不一样的地方就是指令内容,按理不会有影响。

解决方案 »

  1.   

    还是说的,tcp,udp协议传信息一般用的是套接字来写的
      

  2.   

    不用多看你的代码,只要看到 Sleep 语句就知道是学了“坑爹的代码”的结果了。你想一下,什么通讯需要故意延迟?这可以说肯定是那些成事不足败事有余的代码才需要延迟啊!肯定是搞不定的情况下来“死马当活马医”地插入延迟。比如说你写 Sleep(800),你怎么知道信息不是180毫秒就到来,或者是需要980毫秒才到来?这种Sleep纯粹是为了“一卡一卡地”才写的代码,纯粹是为了捣乱才写的代码。之所以写写这种代码,就说明当初教你写代码的人自己就不懂如何写通讯代码,他如果不故意作假地卡住程序,他写的程序的通讯数据错乱现象就立刻像南郭先生一下露陷了,所以他才写了 Sleep 代码。建议你从头开始重新学习有关的 Tcp 通讯教程。(至少在最近20年的编程教程中)见到这类 Sleep 代码出现在通讯 Receive 过程中就可以判定为垃圾。
      

  3.   

    当你“调来调去”地去修改sleep 代码时,有时候也是会应付眼前的需求。这其实就是上当的根源。我们不用看更多的代码,看设计模式就知道这类程序会出什么事儿。