实际上,我想用C创建一个应用程序,以便2个人可以彼此聊天。让我们假设他们知道他们的IP(实际上,我想我在这里犯错了。我从www.whatismyip.com获取我的IP)。 通用标签

以上是接收其他人发送的内容的功能。当from的值是“ 127.0.0.1”时,它的效果很好,但是当使用我的ip(117.193.52.176)时,会出现其他情况。谁能告诉我我哪里错了?

有帮助吗?

解决方案

您传递给“绑定”的地址可能有误。只需使用INADDR_ANY(0)的IP进行绑定即可。我怀疑117.193.52.176可能是您本地NAT之外的外部IP地址。您电脑的真实IP地址是192.168.1.2或类似的名称。从命令行键入“ ipconfig / all”。无论如何,只要绑定到INADDR_ANY,就不必知道您的真实IP地址。

此代码的其他问题:

  1. 不检查套接字API的返回值
  2. 不要为每个recvfrom调用都调用WSAStartup和WSACleanup。只需在您的应用程序中调用一次WSAStartup,就不必担心调用WSACleanup。
  3. 我不确定行“ char RecvBuf [data_length];”是否正确将编译。 (堆栈上动态长度的静态缓冲区的长度?也许是编译器的新功能)。
  4. 不要为每个recvfrom调用创建一个新的套接字。创建一次并绑定到它,然后将其用于所有后续的send / recv调用。

    5 ..一个更基本的设计问题。除非您和您与之通信的人都直接连接到Internet(不是NAT,也没有防火墙),否则发送和接收UDP数据包将很困难。在此处阅读文章。

    无论如何,这是代码的更干净版本: 通用标签

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top