日期:2014-05-19  浏览次数:20651 次

socket接发数据的多线程问题
IPAddress   SIP   =   IPAddress.Parse(txtIP.Text.Trim());
                                int   SPort   =   Convert.ToInt32(txtPort.Text.Trim());
                                IPEndPoint   iep   =   new   IPEndPoint(SIP,   SPort);

                                socket   =   new   Socket(AddressFamily.InterNetwork,   SocketType.Stream,   ProtocolType.Tcp);
                                socket.Connect(iep);
                                btnListen.Enabled   =   false;
                                btnClose.Enabled   =   true;
                                btnSend.Enabled   =   true;
                                toolStrip1.Items[0].Text   =   string.Format( "连接{0}:{1}成功... ",txtIP.Text,txtPort.Text);
                                timer1.Start();//timer的tick如下

                private   void   timer1_Tick(object   sender,   EventArgs   e)
                {
                        string   recMsg   =   socket.Receive(byteMessage,   SocketFlags.None).ToString();
                        string   str   =   Encoding.ASCII.GetString(byteMessage);
                        string   tmp   =   byteMessage[0].ToString();
                        txtDataFlow.AppendText(tmp);
                        receiveMsg   =   receiveMsg   +   str;
                        txtMsg.AppendText(str);                      
                }

采用socket连接主机,上面的代码能接收到数据,有2个问题:
1     当主机发出数据后,客户端开始接受,接受完后,客户端就像死机了一样,主机再次发送数据后,又能正常接收,循环...加入多线程后,不会有“死机”现像,但接不到数据了...帮帮忙...
2     上面的写法,有没有算法,可以一次性将接收到数据换成字符串,不要一个字母一个字母的接收,就是如何将byte一次接受后,转换string.


------解决方案--------------------
你的代码???

还是去看看我的BLOG吧:wzd24.cnblogs.com
------解决方案--------------------
关注,帮顶了............
------解决方案--------------------
路过,不懂,只能帮你顶一下了
------解决方案--------------------
SF
------解决方案--------------------