我可以在连接异步套接字时发送字符串(或特定数字)吗

Posted

技术标签:

【中文标题】我可以在连接异步套接字时发送字符串(或特定数字)吗【英文标题】:Can I send a string (or a specific number) on connecting an Async socket 【发布时间】:2014-07-08 13:38:28 【问题描述】:

我想发送一个唯一标识符 A 我连接一个 IPC 套接字。

IPEndPoint epServer = new IPEndPoint(aryLocalAddr[0], port);

socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Blocking = false;
socket.BeginConnect(epServer, new AsyncCallback(ConnectCallBack), socket);

有没有办法向套接字添加一些东西,以便监听器(接受器)能够获取这个唯一的 ID?我想在连接步骤中执行此操作。

【问题讨论】:

这是您的协议应该规定的内容,例如“当客户端连接时,它会生成一个 [UUID] 并在 [connect] 消息中将其发送到服务器” 【参考方案1】:

您受到协议的限制。您只能发送可以通过设置的 Frame 发送的内容。

TCP on Wikipedia

在数据交换发生之前,您首先必须进入“ESTABLISHED”状态。 Connect() 将您带到那里,因此您无法在连接之前发送数据,因为您的连接尚未建立。

但是,您可以连接到服务器,然后立即发送您的第一条消息。您的服务器可以等待您的客户端的第一条消息,如果它不是预期的消息,则关闭连接。

【讨论】:

以上是关于我可以在连接异步套接字时发送字符串(或特定数字)吗的主要内容,如果未能解决你的问题,请参考以下文章

PHP 可以异步使用套接字吗?

使用 ZeroMQ Socket 时,我可以从一个线程 send() 并从另一个线程发送 recv() 到同一个套接字吗?

在使用 websockets 时,我可以在发送查询字符串时传入标头吗?

当套接字重新连接时,如何让 socket.io 服务器向特定套接字重新发送消息?

如何在 C# 应用程序中取消异步发送套接字

重用异步套接字:后续连接尝试失败