它与TCP和UDP之间的区别有关.当您创建TCP套接字时,您正在创建与另一台计算机上的端口的同步客户端连接,并且当您连接到地址时,您实际上也会在套接字上获得本地端口.因此,在您的示例代码中,创建的两个套接字可能是

clientSocket = localhost:2649 ipAddress:8000

clientSocket1 = localhost:2650 ipAddress:8000

请注意,虽然它们的远程地址相同,但本地地址具有不同的端口,这就是允许这样做的原因.因此,本地远程计算机可以使用已建立的端口可靠地来回发送数据.

对于UDP,情况并非如此(我假设您正在使用DatagramSocket).由于UDP是异步的(与TCP之类的同步相反),为了接收数据,您不会创建与另一台特定机器的绑定,因此例如,如果您尝试

DatagramSocket udp1 = new DatagramSocket(8000); // = localhost:8000 ?

DatagramSocket udp2 = new DatagramSocket(8000); // = localhost:8000 ?

udp套接字不知道数据来自何处,因此不能有像TCP这样的唯一映射,与TCP不同,您指定的端口是您机器的端口,而不是远程机器端口.

创建UDP套接字时想到它的另一种方法就像创建TCP服务器套接字一样.当您创建TCP服务器套接字时,它正在等待来自某台计算机的连接但该计算机未知,并且当您创建TCP服务器套接字时,您指定的端口是本地端口:

ServerSocket ss1 = new ServerSocket(8000); // = localhost:8000 ?

ServerSocket ss2 = new ServerSocket(8000); // = localhost:8000 ?

与UDP类似,这将创建绑定异常,因为该端口用于本地计算机,并且映射不再是唯一的.但是,当您接受服务器套接字上的连接时,远程计算机会发挥作用以使套接字唯一,就像创建Socket到远程计算机时一样:

Socket s1 = ss1.accept();// localhost:8000 remoteIp1:12345

Socket s2 = ss1.accept();// localhost:8000 remoteIp2:54321

请注意,虽然本地地址相同,但套接字的远程地址不同,因此总映射(localip:port< - > remoteip:port)现在是唯一的.

因此,在某种程度上,您可以将UDP套接字视为类似于TCP服务器套接字,这就是为什么必须将其绑定到唯一端口的原因.

java udp 同一个端口_java – 系统中的两个不同的UDP套接字可以绑定相同的端口吗?...相关推荐

  1. java socket 连接异常_java.net.SocketException:软件导致连接中止:套接字写错误

    参见英文答案 > Official reasons for "Software caused connection abort: socket write error"    ...

  2. 利用Windows 2003系统中实现两个网段的路由

    利用Windows 2003系统中实现两个网段的路由 当一个局域网中存在两个以上网段时,分属于不同网段内的主机彼此互不可见.为了解决这个问 题,就必须在不同的网段之间设置路由器.如果花费上万元资金购买 ...

  3. 热拉显示服务器端口错误,打开端口 50,000 上服务器 /192.168.1.100 的套接字时出错,消息为:Connection timed out: connect。 ERROR解决办法...

    打开端口 50,000 上服务器 /192.168.1.100 的套接字时出错,消息为:Connection timed out: connect. ERROR解决办法 打开端口 50,000 上服务 ...

  4. java 同时修改同一个数据_Java 语言中锁的设计与应用

    前言 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相关源码(本文中的源码来自JDK 8).使用场景进行举例,为读者介绍主流锁的知识点,以及不同的 ...

  5. JAVA:如何在Windows7系统中配置环境变量。

    笔者之前因为操作系统老旧而在网络上苦苦搜寻不到环境变量配置的方法,最终在<Java:从入门到精通>的旧版书上找到了解决办法,故将其抄录下来分享给大家. 在Windows 7系统中配置环境变 ...

  6. Java私有方法解释_java接口中 定义 private 私有方法

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

  7. java 构建者模式_Java方法中的参数太多,第3部分:构建器模式

    java 构建者模式 在我的前两篇文章中,我研究了如何通过自定义类型和参数对象减少构造函数或方法调用所需的参数数量. 在本文中,我将讨论如何使用构建器模式来减少构造器所需的参数数量,并讨论该模式如何甚 ...

  8. java实现多态在工资系统中的应用:给出一个根据雇员类型,利用多态性完成工资单计算的程序。

    要求: Employee是抽象类,Employee的子类有Boss(每星期发给他固定工资,而不计工作时间).CommissionWorker(除基本工资外还根据销售额发放浮动工资).PieceWork ...

  9. Java实现 LeetCode 609 在系统中查找重复文件(阅读理解+暴力大法)

    609. 在系统中查找重复文件 给定一个目录信息列表,包括目录路径,以及该目录中的所有包含内容的文件,您需要找到文件系统中的所有重复文件组的路径.一组重复的文件至少包括二个具有完全相同内容的文件. 输 ...

最新文章

  1. java面向对象-------静态初始化块
  2. Java多线程复习:3(在操作系统中查看和杀死进程线程)
  3. 在深谈TCP/IP三步握手四步挥手原理及衍生问题—长文解剖IP
  4. 将数组存入mysql数据库,将数组值写入mysql数据库
  5. 这就是计算机男用英语怎么说,科学网—Is a computer male or female? 计算机是男的还是女的? - 邱敦莲的博文...
  6. StackOverflow程序员推荐:每个程序员都应读的30本书
  7. Java Object类详解
  8. thinkcmf安装教程与目录结构详解 快速上手版
  9. Kinect + OpenNI + OpenCV + OpenGL 三维重建
  10. 【html和css入门】实现简单的页首导航
  11. 大额支付系统行号编制规则
  12. 判断多边形是凹多边形还是凸多边形,以及求凹点
  13. 色彩原理与色彩搭配知识点回顾总结
  14. K8s问题【flannel一直重启问题,CrashLoopBackOff】
  15. win7去掉桌面快捷方式小箭头
  16. rabbitmq:publisher confirms
  17. Labview串口通信中ASCII码和数值相互转换
  18. 联想拯救者y7000电脑开机一直是锁屏界面,点一下就黑屏,无法进入输密码界面
  19. Go语言微服务实战之API网关
  20. Android studio安装配置

热门文章

  1. git放弃本地修改,强制覆盖本地文件
  2. 详解k8s deployment的滚动更新
  3. golang变量的数据类型:整型及其使用细节
  4. jenkins pipeline、用户权限管理、插件下载地址更改、凭证管理、自由风格项目构建、maven项目构建、常用的构建触发器、邮件发送、SonarQube代码审查
  5. JVM调优:一个对象从出生到消亡过程
  6. Linux 格式化输出当前系统时间
  7. @EnableCaching与@Cacheable的使用方法,结合redis进行说明
  8. python memory usage_Python Pandas Index.memory_usage()用法及代码示例
  9. Spring之RestTemplate如何返回map结果集
  10. Host Switch Plus结合nginx使用