日期:2014-05-16  浏览次数:20862 次

c# Socket 线程 问题请教
最近在学习Secoket与线程,想做一个Form界面,客户端、服务端可以互发消息并显示,但遇到了这么一个问题,当启动服务端server.exe后发送消息,客户端可以接受到并显示,但客户端发送消息,服务端却不能显示。我单步调试,发现问题出在这里:
一开始启动server.exe的时候,服务端会停在vsClientSocket = vsServerSocket.Accept();这等待客户端接入,但但客户端发送消息过来后,服务端会往下执行但vsClientSocket.Receive(buffer, 0, bufLen, SocketFlags.None);函数中返回的bufLen长度为零,从而程序会再次到vsServerSocket.Accept();处进行等待。但再次从客户端发送信息的时候,服务端就没有反应了,单步调试,显示为跟按F10没有反应,也见不到光标在什么位置,但vs还是在debug模式。
所以,现在问题有下面两个:
1、bufLen长度为零,为什么会是0呢?
2、再次从客户端发送信息的时候,服务端就没有反应了,这是由什么原因造成的呢?
源代码如下:
客户端:
 public partial class Client : Form
    {
        Socket vsClientSocket;
        Thread vsClientThread;
        string strIP = "127.0.0.1";
        public delegate void PassString(string strMsg);
        int nPort = 9002;
        public Client()
        {
            InitializeComponent();
        }
        public void SetSendData(string strMsg)
        {
            if (tBoxClientSend.InvokeRequired == true)
            {
                PassString d = new PassString(SetSendData);
                this.Invoke(d, new object[] { strMsg });
            }
            else
            {
                tBoxClientSend.Text = strMsg;
            }
        }
        public void SetRecvData(string strMsg)
        {
            if (tBoxClientReceive.InvokeRequired == true)
            {
                PassString d = new PassString(SetRecvData);
                this.Invoke(d, new object[] { strMsg });
            }
            else
            {
                tBoxClientReceive.Text = strMsg;
            }
        }
        privat