异步客户端套接字 c#。我如何在不阻塞程序运行的情况下循环等待来自服务器的信息?
Asynchronous client socket c#. How can i wait in loop for informations from the server without blocking the operation of the program?
我创建了 class 来像这样与 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, 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
.
的形式显示来自服务器的每条消息
我该怎么做?
好吧,您可以创建一个 List 对象来保存所有传递的消息,然后设置一个 Timer 以经常检查列表是否已添加到。将消息添加到文本框后,从列表中删除您每次阅读的内容。
这个项目比那个复杂一点,但这里以我在中学时从事的一个旧项目为例:https://github.com/Taloreal/Server-Essentials
我创建了 class 来像这样与 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, 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
.
我该怎么做?
好吧,您可以创建一个 List 对象来保存所有传递的消息,然后设置一个 Timer 以经常检查列表是否已添加到。将消息添加到文本框后,从列表中删除您每次阅读的内容。
这个项目比那个复杂一点,但这里以我在中学时从事的一个旧项目为例:https://github.com/Taloreal/Server-Essentials