C# C套接字:自动接收消息
我对C和Sockets比较陌生,但我正在尝试制作一种聊天程序。目前我遇到的问题是,如果服务器有消息,客户端可以自动接收来自服务器的消息 到目前为止,我所尝试的: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)
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可与套接字一起使用。