Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C套接字:自动接收消息_C#_Sockets_Client - Fatal编程技术网

C# C套接字:自动接收消息

C# C套接字:自动接收消息,c#,sockets,client,C#,Sockets,Client,我对C和Sockets比较陌生,但我正在尝试制作一种聊天程序。目前我遇到的问题是,如果服务器有消息,客户端可以自动接收来自服务器的消息 到目前为止,我所尝试的: System.Threading.Thread myThread = new System.Threading.Thread(new System.Threading.ThreadStart(listenThread)); public static void listenThread() { while(true)

我对C和Sockets比较陌生,但我正在尝试制作一种聊天程序。目前我遇到的问题是,如果服务器有消息,客户端可以自动接收来自服务器的消息

到目前为止,我所尝试的:

System.Threading.Thread myThread = new System.Threading.Thread(new
    System.Threading.ThreadStart(listenThread));


public static void listenThread()
{
    while(true){
        Form1 form1 = new Form1();
        form1.ReceiveLoop();
    }

}

private void ReceiveLoop()
{
    clientSocket.ReceiveTimeout = 100;
    byte[] receivedBuffer = new byte[1024];
    try
    {
        int rec = clientSocket.Receive(receivedBuffer);
        byte[] data = new byte[rec];
        Array.Copy(receivedBuffer, data, rec);
        updateClient("Received: " + Encoding.ASCII.GetString(data));
    }
    catch (SocketException e)
    {
        //MessageBox.Show(e.ToString());
    }
}
当我从GUI线程访问时,ReceiveLoop工作,但是由于通过myThread访问时超时,它不会引发SocketException


如果您能给我提供任何帮助或建议,我将不胜感激:这是行不通的。这并不是对问题的描述。错误消息?线路号?1a。不要阻塞UI线程。1b。始终在UI线程上更改UI。2a。使用StreamReader和StreamWriter。2b。使用UTF8而不是ASCII。3.别忘了关闭流。@spender对不起,我是说它抛出了一个SocketException。例如,套接字超时。@AhmedKRAIEM对不起,我不太明白你说的“不要阻止UI线程”是什么意思。另外,我在进行更改时调用UI线程,这仍然是不可接受的吗?我的整个系统目前运行在套接字上,streamreader和writer是否更有效?1。如果你在UI线程上等待很长时间,可能UI会冻结。2.另外,我在确定是时调用UI线程,这是正确的方法。3.StreamReader和StreamWriter可与套接字一起使用。