日期:2014-05-18  浏览次数:20933 次

关于Socket的问题,高手速度来啊。。
以下是我的程序:
C# code


int port = int.Parse(this.textBox2.Text);
string host = this.textBox1.Text;
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);
s = new Socke(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);//创建一个Socket类 
s.Bind(ipe);//绑定8901端口 
s.Listen(0);//开始监听 
Socket temp = s.Accept();
while (1 == 1)
{
    string recvStr = "";
    byte[] recvBytes = new byte[10240];
    int bytes = 10240;
    bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息 
    recvStr += Encoding.Unicode.GetString(recvBytes, 0, bytes);
    string a = UNcode.strtohex(recvStr.ToString());
    if (a != "")
    {
        FileStream file = new FileStream("log.txt", FileMode.Append);
        StreamWriter sw = new StreamWriter(file);
        sw.Write(DateTime.Now.ToString() + "  日志记录信息:" + "  " + a + "\n");
        sw.Close();
        file.Close();
    }
                   // DetailTPosition.DetailTPositions(a);
}
s.Close();




就是想把从Socket接收到的所有信息存进log.txt文本文档里面,但是总会出现接收几条信息后,,,程序就会一直recvStr为空循环,按道理说程序应该停在bytes = temp.Receive(recvBytes, recvBytes.Length, 0);这句才对的啊。。。应该是收到信息在进行循环吧,,,,在这里请求各位高手帮忙。。。3Q!

------解决方案--------------------
temp.Receive

是同步方法,也就是说,如果没有数据的话,他不是阻塞,而是继续往下执行的
------解决方案--------------------
最好用线程