【问题标题】:Using Different protocols in same application using same socket在使用相同套接字的同一应用程序中使用不同的协议
【发布时间】:2012-01-24 07:23:24
【问题描述】:

我可以在同一个套接字上发送和接收 UDP 数据报吗,我用于 TCP 通信。我的应用程序中存在多媒体通信,我必须使用 UDP 进行通信。如果我创建一个新套接字,它会引发属性异常LingerStateNoDelay。当我将旧 Socket 实例分配给其他 Socket 变量时,它不允许我更改属性,因为大多数属性都是只读的。我必须在 TCP 连接区域发送数据。

*代码*

Socket SendingSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint Endp = new IPEndPoint(IPAddress.Parse("192.168.3.233"), port);

SendingSocket.Bind(Endp);

while (SendingSocket.Connected)
{ string Message = "测试通过 UDP 发送的消息"; ASCIIEncoding 编码 = new ASCIIEncoding(); byte[] MessageBytes = Encode.GetBytes(Message); SendingSocket.SendTo(MessageBytes, 0, MessageBytes.Length, SocketFlags.None, Endp); }'

【问题讨论】:

  • TCP 和 UDP 的工作方式完全不同。 TCP 保持客户端/服务器之间的持续连接,直到它被关闭/丢弃。 UDP没有。我见过的任何需要两者的软件都有两个正在使用的套接字,一个用于 TCP,另一个用于 UDP。
  • 我只是问这是应用程序的要求。我已经分开沟通了

标签: c# sockets udp client-server


【解决方案1】:

很难从该代码片段中看出,但您可能不需要SendingSocket.Bind(Endp),因为您的SendingSocket.SendTo 还包括IP 端点。也可以试试

SendingSocket.SendTo(MessageBytes, Endp);

【讨论】:

    【解决方案2】:

    没有。您不能对 TCP 和 UDP 使用相同的套接字。一个套接字只绑定一个协议。

    【讨论】:

    • 在我的情况下,SocketA 绑定到 TCP。我想为 UDP 通信创建一个 SocketB。当我以这种方式创建时,它抛出异常,错误代码为 10045 10042..我认为在连接到 MachineA 的 SocketA 下创建 Socket 对象时抛出的异常..同时我也打算与 MachineA 通信。
    • Socket SendingSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint Endp = new IPEndPoint(IPAddress.Parse("192.168.3.233"), 端口); SendingSocket.Bind(Endp);而(SendingSocket.Connected); { string Message = "测试通过 UDP 发送的消息"; ASCIIEncoding 编码 = new ASCIIEncoding(); byte[] MessageBytes = Encode.GetBytes(Message); SendingSocket.SendTo(MessageBytes, 0, MessageBytes.Length, SocketFlags.None, Endp); }'
    猜你喜欢
    • 2019-08-11
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    • 2015-11-17
    相关资源
    最近更新 更多