【问题标题】:Why can't I send to the listening socket anymore?为什么我不能再发送到监听套接字了?
【发布时间】:2011-03-15 00:17:25
【问题描述】:

我正在用 C# 为在线游戏编写一个简单的代理(更多的是数据包记录器)。 基本的登录流程是这样的:

客户端->服务器:登录数据包 - 我的代理接收数据包,显示它并将其发送到服务器。

服务器->客户端:已连接!数据包 - 我的代理再次收到数据包,它也会再次显示它,但是当尝试将它发送到客户端时,它说:

“发送或接收数据的请求被拒绝,因为套接字未连接并且(当使用 sendto 调用在数据报套接字上发送时)没有提供地址。”

我的代码:http://lesderid.pastebin.com/NkEy7qQp

【问题讨论】:

    标签: c# exception sockets tcp asynchronous


    【解决方案1】:
    171: listenSocket.Send(RecvBuffer2);
    

    您不应该尝试在此侦听套接字上发送。您需要在使用 EndAccept() 创建的套接字上发送。 (代码中的 winSock2 - 但您需要以不同的方式对其范围进行调整。)

    【讨论】:

      【解决方案2】:

      侦听 TCP 套接字只有一个功能 - 接受客户端连接。该连接将占用一个新的套接字描述符,即将为每个新的客户端连接创建一个新的套接字(在 C 中这就是 accept(2) 系统调用返回的内容)。

      你不能send(2)recv(2)监听套接字上的数据。

      【讨论】:

      • 谢谢你的解释,我现在明白了。不过我不会选择这个作为答案,因为它不能直接解决我的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      相关资源
      最近更新 更多