msdn里讲socket receive方法时有如下代码:
C#] 
// Displays sending with a connected socket
// using the overload that takes a buffer.
public static int SendReceiveTest1(Socket server)
{
    byte[] msg = Encoding.UTF8.GetBytes("This is a test");
    byte[] bytes = new byte[256];
    try 
    {
        // Blocks until send returns.
        int i = server.Send(msg);          //请注意,先发送
        Console.WriteLine("Sent {0} bytes.", i);
        
        // Get reply from the server.
        i = server.Receive(bytes);         //请注意,又接收
        Console.WriteLine(Encoding.UTF8.GetString(bytes));
    }
    catch (SocketException e)
    {
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
        return (e.ErrorCode);
    }
    return 0;
}请分析这样在一个socket连接里连续发送和接收,会有问题吗?
我碰到的问题是:我在socket客户端,也是如上一样,先发送信息给服务器端,然后接收服务器端回执信息。调试时,我发现服务器端可以接收到信息,也发送了回执信息,可是在我的客户端程序里,一加上receive相关的代码,程序就死掉了。把receive相关代码去掉,就ok了。不知...

解决方案 »

  1.   

    msdn关于socket的例子太不详细,建议找别的看。
      

  2.   

    beginreceive是不是做异步通信时用的?
    receive不行吗?
    ...
      

  3.   

    receive不会立即返回,会等待,这在多线程程序中有时会造成阻塞甚至死锁
      

  4.   

    如果你的客戶端和server都在一台機器上,可能就會出錯,因為反應太快,所以接收緩沖可能還沒建立,數據就已經到了,所以造成無法接收的情況,如果server發了兩次數據,你就會發現,第二次發的收到了。如果客戶端和server不在一個機器上,上面的代碼,應該說沒有問題。