【发布时间】:2020-11-26 01:01:56
【问题描述】:
我正在尝试使用 TCP 客户端与服务器通信。但是要通信,有连接规则:
- 每当阅读器要开始通信时,必须在其输出上放置标记 1。
- 服务器将此信号视为连接请求指示,仅在稳定 1 秒后有效。
- 一旦连接请求被接受,服务器开始发送 ENQ 信号字符。 (ENQ = 05 十六进制)
我想我需要使用一些“睡眠”功能 1 秒并发送 1 作为标记。所以我实现了以下示例:
public void Initialize(string ip, int port)
{
try
{
tcpClient = new TcpClient(ip, port);
if (tcpClient.Connected)
Console.WriteLine("Connected to: {0}:{1}", ip, port);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Initialize(ip, port);
}
}
public void BeginRead()
{
var buffer = new byte[4096];
NetworkStream ns = tcpClient.GetStream();
ns.ReadTimeout = 1000;
ns.BeginRead(buffer, 0, 9, EndRead, buffer);
}
class Program
{
static void Main(string[] args)
{
var client = new Client();
client.Initialize("192.168.0.250", 2180);
client.BeginRead();
Console.ReadLine();
}
}
当我运行此代码时,显示消息:“已连接到 192.168.0.250”。现在按照规则,我需要从服务器接收 ENQ (05 Hexa) 信号。我如何接收这个信号?
【问题讨论】:
-
查看
TcpClient.BeginConnect():docs.microsoft.com/en-us/dotnet/api/… -
嗨,Andy,我使用示例测试了 BeginConnect。在这两种方法(socket 和 tcpclient)中,它都显示了连接的消息。连接后,我需要遵循规则#3。我测试的示例:stackoverflow.com/questions/28158892/…
标签: c# asynchronous tcpclient