Socket:长连接,第一次通信可收发;第二次可收,发送后客户端收不到消息,麻烦各位给点意见。
服务器端是用的C# .net技术,客户端是用的C++class Listener
{
    private TcpListener tcpListener = null;    /// <summary>
    /// 启动监听,轮询监听客户机请求并将客户端套接字存入转发表
    /// </summary>
    public void StartUp()
    {
        IPAddress localIP = Dns.GetHostAddresses(Dns.GetHostName())[0];//可能有多个,此时的IP是本地IP
        tcpListener = new TcpListener(localIP, 1000);
        tcpListener.Start();//开始侦听传入的连接请求。 
        Console.WriteLine("服务器已启动,正在监听...\n");
        while (true)
        {
            byte[] bytesRcv = new byte[maxPacketB];
            int rcvLen;
            Socket clientSkt = tcpListener.AcceptSocket();
            rcvLen = clientSkt.Receive(bytesRcv);            //此处给 bytesSend 赋值,可以肯定没问题,略            clientSkt.Send(bytesSend, rcvLen, SocketFlags.None);    //此处可发送,对方也可以接受到            while (true)
            {
                bytesRcv = new byte[maxPacketB];
                bytesSend = new byte[maxPacketB];                rcvLen = clientSkt.Receive(bytesRcv);                //此处给 bytesSend 赋值,可以肯定没问题,略                clientSkt.Send(bytesSend, rcvLen, SocketFlags.None);    //此处可发送,但对方接受不到
            }
        }
    }
}

解决方案 »

  1.   

    while(true)里面又套了一层while(true)???那你的第一层while(true)就没有意义了。
    另外,你怎么确定“clientSkt.Send(bytesSend, rcvLen, SocketFlags.None);    //此处可发送,但对方接受不到”
    你怎么确定这里可发送了??之前rcvLen = clientSkt.Receive(bytesRcv); 在没有收到对方的信息之前会阻塞在这里。
      

  2.   


    通过逐步调试知道的。
    有收到对方的信息之前会阻塞在那个地方,就是接受到消息后,便会继续往执行。
    最后那行“clientSkt.Send(bytesSend, rcvLen, SocketFlags.None);”也执行了,但是对方没有收到