异步客户端套接字c#。我如何在循环中等待来自服务器的信息而不阻塞程序的操作?
我创建了与TCP服务器通信的类,如下所示:异步客户端套接字c#。我如何在循环中等待来自服务器的信息而不阻塞程序的操作?,c#,winforms,sockets,asynchronous,tcpclient,C#,Winforms,Sockets,Asynchronous,Tcpclient,我创建了与TCP服务器通信的类,如下所示: public class Tcp_client_server_communication { private static TcpClient client; private static String response = String.Empty; public void Initialize(string ip, int port) { client = new TcpClient(ip, por
public class Tcp_client_server_communication
{
private static TcpClient client;
private static String response = String.Empty;
public void Initialize(string ip, int port)
{
client = new TcpClient(ip, port);
}
public string BeginRead()
{
var buffer = new byte[16];
var ns = client.GetStream();
ns.BeginRead(buffer, 0, buffer.Length, EndRead, buffer);
}
public void EndRead(IAsyncResult result)
{
var buffer = (byte[])result.AsyncState;
var ns = client.GetStream();
var bytesAvalible = ns.EndRead(result);
MessageBox.Show(Encoding.ASCII.GetString(buffer));
BeginRead();
}
}
要调用这些方法,我使用:
.Initialize();
.BeginRead();
它工作正常,但我想在多行TextBox
而不是MessageBox
中显示来自服务器的每条消息
如何才能做到这一点?您可以创建一个列表对象来保存传递的所有消息,然后设置一个计时器,以便每隔一段时间检查列表是否已添加到。将消息添加到文本框后,从列表中删除您在每个勾号上读取的内容
这个项目比那个要复杂一点,但这里有一个我在中学时做过的老项目作为例子:你可以创建一个列表对象来保存传递的所有消息,然后设置一个计时器,每隔一段时间检查一次列表是否已添加到。将消息添加到文本框后,从列表中删除您在每个勾号上读取的内容
这个项目比那个要复杂一些,但这里有一个我在中学时做过的老项目作为例子:第一个错误是忽略了可用的
字节数,这告诉你有多少缓冲区是有效的。第二个错误是假设“消息”。TCP是一个无止境的字节流,而不是消息流<代码>写入
和读取
不是“配对”1-1。因此,你的问题基本上与tcpclient或流读取无关,而是从不同的线程将内容写入多行文本框。因此,您应该研究以下两件事:1)“C#将多个字符串写入多行文本框”和2)“C#从不同的线程将文本写入控件”,您只需复制粘贴这些搜索查询第一个错误是忽略字节可用
,这会告诉您有多少缓冲区
是有效的。第二个错误是假设“消息”。TCP是一个无止境的字节流,而不是消息流<代码>写入
和读取
不是“配对”1-1。因此,你的问题基本上与tcpclient或流读取无关,而是从不同的线程将内容写入多行文本框。因此,您应该研究以下两件事:1)“C#将多个字符串写入多行文本框”和2)“C#将文本写入不同线程的控件”,您只需复制粘贴这些搜索查询即可