当前位置: 首页 > 知识库问答 >
问题:

UDP和TCP总是对一个客户端使用相同的IP?

上官华池
2023-03-14

我已经为我的在线游戏制作了一个服务器(python,twisted)。从TCP开始,后来增加了UDP的不断更新(速度有了很大的提高)。但现在,我需要将每个UDP套接字客户端与每个TCP客户端连接起来。

我首先让每个客户机连接到TCP服务器,并获得唯一的ID。然后客户端将此ID发送到UDP服务器,并将其连接起来。然后,我有一个TCP客户端的主列表(按唯一ID排序)。

我的目标是能够通过TCP和UDP向同一客户端发送消息。
将UDP和TCP套接字链接到同一客户端的最佳方法是什么?

我可以直接获取一个新的TCP客户端的IP地址,然后通过UDP向该IP发送数据吗?或者客户端有必要连接两次,一次用于TCP,一次用于UDP(通过发送'connect'消息)?

最后,如果任何了解TCP/UDP的人可以告诉我(我是新来的!),当通过UDP与TCP(从同一台机器)连接时,相同的客户端是否具有相同的IP地址?(我需要知道这一点,以安全我的服务器,但我不想不小心屏蔽了一些公平的用户)

共有1个答案

慎旭尧
2023-03-14

回答你的最后一个问题:不。因为:

  1. 如果客户端位于NAT之后,并且网关(带有NAT)有多个IP,则每个连接都可以被您视为来自不同IP的连接。
  2. 另一个问题是,当同一NAT后面的几个不同客户端与您的服务器连接时,您将拥有多对TCP-UDP客户端。并且不可能加入正确的对。

你的方法似乎是解决这个问题的好办法。

 类似资料:
  • 当我在客户端使用下一段代码时: 我得到一个例外,它只允许使用单个套接字地址。但在服务器端我使用: 我需要编写一个客户端,可以在同一端口的TCP和UDP协议上工作。TCP-通用命令,UDP-语音流。如何做到这一点?

  • Coroutine\Client提供了TCP、UDP、unixSocket传输协议的Socket客户端封装代码,使用时仅需new Swoole\Coroutine\Client即可。 实现原理 Coroutine\Client的所有涉及网络请求的方法,Swoole都会进行协程调度,业务层无需感知 使用方法和Client同步模式方法完全一致 connect超时设置同时作用于Connect和Recv、

  • 我正在用Java编写一个客户端-服务器应用程序,客户端和服务器可以通过UDP套接字进行交互,通过TCP套接字进行乒乓交互,用户(客户端)可以通过TCP套接字进行聊天。 我有两个独立的TCP和UDP线程。我将服务器的TCP和UDP功能融合在一起(只需启动TCP和UDP线程)。但我该如何为客户做这件事呢? 我在这里浏览了以下几页: 1)这个家伙为两个独立的客户端分离了TCP和UDP:一个服务器中的Ja

  • 我想编写一个tcp服务器和客户端应用程序,在客户端使用相同端口号的情况下,它们之间有几个不同的连接。 据我所知,服务器有一个侦听器端口,当客户端调用它时,我会在服务器端为这个新连接获得一个新的套接字,当我调用它时 正当所以在服务器端,我可以识别我与这个新套接字的连接,并通过它发送数据。 现在,我的理解与客户端的问题。我打电话的时候会拿到插座 所以我只有一个插座。在 我可以指定远程地址等等。所以当我

  • udp 客户端 udp 客户端 源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * *//* * 程序清单:udp 客户端 * * 这是一个 udp 客户端的例程 * 导出 u

  • 是否有一种简单的(非迭代的)方法来绑定两个套接字,一个TCP和一个UDP,以保证它们都具有相同的临时端口? 我有一个简单的服务器,最初通过TCP连接,但也通过UDP传输。我不想在连接后从客户端发送UDP数据包,只是为了让服务器发现客户端的UDP临时端口。除非必要,否则我不想通过初始传输控制协议消息发送端口号。 现在,我在TCP套接字上的getsockname之后显式绑定客户端UDP套接字的端口,以