c# socket如何判断发送已经客户端接收完毕? 如果能提供实例那最好了。谢谢。

解决方案 »

  1.   

    socket.BeginSend  函数中的 AsyncCallback 是一个发送完后触发的委托, 该委托可实现如下:void asyncCallback(IAsyncResult ar)
    {
        Console.write("发送完毕");
    }
      

  2.   

    用的是tcp,我目前想实现的就是判断客户端接收完了我发送的数据,然后服务端再继续执行下一次发送,当没发送完时把这个线程锁住,不执行发送。因为如果不判断是否接受完毕的话,在服务端发送过去后,感觉堵塞了,在客户端接收数据接收到一起去了。
      

  3.   

    其实Socket 只是负责 能够 发送 接收 数据,你这些 应用控制逻辑 应该在你的 数据里面进行定义, 就是定义 数据祯 格式, 
      

  4.   

    1。tcp/ip是可信任的连接一般不会出现丢包现象
    2。发送端 发送的数据 是先放送到socket的底层缓冲区的,所以有时候你的接受端还在接收处理的时候,发送端的下一次数据都可能已经发送完成(小于缓冲区size),所以要满足你的需要最好还是用4楼的方法。
    3。因为数据量过大在发送的时候就有可能造成接受端在处理的时候发送的数据已经超过缓冲区的大小从而造成阻赛或者抛出socketexception,所以如果只是保证发送成功的活可以在每发送一部分之后就sleep 一下,然后再发送