2 yuemuhan999 yuemuhan999 于 2016.01.15 12:37 提问

java 客户端Socket端口问题

tcp问题,客户端Socket提问,getLocalPort(),连接的是本地的服务端,第一次运行是2880,第二次运行是2881,第三次运行是2882,我想了解客户端的端口是怎么回事,端口是怎么分配的?

5个回答

enpterexpress
enpterexpress   Rxr 2016.01.15 12:49

一个连接占用一个端口,分配端口有自己的算法
像这个就是随机分配不常用的

91program
91program   Ds   Rxr 2016.01.15 12:56

端口分配没有什么规定,像偶在程序实现 TCP/UDP 的程序中都是随便选一个不常用的端口。
客户端使用什么端口,一般由服务器决定。因为只有尝试连接服务器的指定端口,才能与服务器建立连接。

CSDNXIAOD
CSDNXIAOD   2016.01.16 00:21

Java Socket服务器与客户端实例
java使用多线程编程,实现socket服务器客户端交互
java Socket 客户端实践
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

u011585735
u011585735   2016.01.16 14:01

TCP 服务端启动时需要自己绑定端口,而客户端启动时不需自己绑定端口,会随机分配一个不常用的端口。

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.01.17 13:44

在TCP/IP的端口分配机制中看到,服务器的保留端口是用来监听发送到服务器的请求的。
当服务器收到客户端请求后,便会建立一个线程负责跟客户端进行通信,而这个新建的线程的端口号是服务器自由分配的,即客户端Socket的端口,这样建立通信之后,然后这个线程继续用这个端口与客户机通信的。
相同问题的帖子:http://bbs.csdn.net/topics/390278142

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java socket 实际端口为什么不是自定的端口
Socket socket = new Socket("127.0.0.1", 8888);ServerSocket server = new ServerSocket(8888);new 一个ServetSocket端口为8888然后调用//调用服务器套接字对象中的accept方法 Socket accept = server.accept(); System.out.println(a...
socket的accept函数解析以及服务器和多个客户端的端口问题
今天与同学争执一个话题:由于socket的accept函数在有客户端连接的时候产生了新的socket用于服务该客户端,那么,这个新的socket到底有没有占用一个新的端口?     讨论完后,才发现,自己虽然熟悉socket的编程套路,但是却并不是那么清楚socket的原理,今天就趁这个机会,把有关socket编程的几个疑问给搞清楚吧。    先给出一个典型的TCP/IP通信示意图。
通过远程连接socket得到客户端的IP和连接端口
TCP:通过远程连接socket得到客户端的IP和连接端口SOCKETacceptSock;acceptSock = accept(listenSock, NULL, NULL); SOCKADDR_IN   sockAddr; int   iLen=sizeof(sockAddr); getpeername(acceptSock ,(struct   sockaddr   *)&sockAddr,&iLen);//得到远程IP地址和端口号  注意函数参数1:此处是接受连接                
Socket怎么在客户端一直监听Socket服务器的端口号
我现在的问题是, 我向服务器端口8881广播了一个数据,服务器那边也收到了我的数据,然后服务器那边已8880的端口返回了一个数据给我,因为如果以8881端口返回的数据还是我自己发送过去的数据。  所以服务器那边是以8880的端口返回数据给我这边。 问题是:我在客户端这边应该怎么接收呢。
java socket 常见连接问题详解
JAVA网络编程Socket常见问题 一. 网络程序运行过程中的常见异常及处理 第1个异常是 java.net.BindException:Address already in use: JVM_Bind。 该异常发生在服务器端进行new ServerSocket(port)(port是一个0,65536的整型值)操作时。异常的原因是以为与port一样的一个端口已经被启动,并进
多线程多端口Socket服务端客户端代码 java
服务端代码 GPRSServer.java 创建服务 GPRSHander.java 调用GPRSServer来创建多线程多端口服务 **************************************************************GPRSServer.java 结束**************************************************
java网络编程(二)复用Socket连接以及使用多线程完成多个客户端的连接
java网络编程(二)复用Socket连接以及使用多线程完成多个客户端的连接
java实现socket连接,向指定主机指定端口发送socket数据,并获取响应数据
全栈工程师开发手册 (作者:栾鹏) java教程全解 java实现远程连接,在控制台输入命令,发送命令到远程主机执行,并获取响应数据测试代码 public static void main(String [] args) throws IOException { connect("192.168.8.102", 80); //即可在控制台输入命令,回
客户端的socket是否需要bind?
bind() 函数的定义与作用——     将一本地地址与一套接口捆绑。本函数适用于未连接的数据报或流类套接口,在connect()或listen()调用前使用。     当用socket()创建套接口后,它便存在于一个名字空间(地址族)中,但并未赋名。bind()函数通过给一个未命名套接口分配一个本地名字来为套接口建立本地捆绑(主机地址/端口号)。 服务端——      
windows和linux socket端口复用特性不一样
http://www.neversaydie.cc/windows-and-linux-socket-port-reuse-characteristics-are-not-the-same/ 昨天在ubuntu/linux下测试的时候,启动java程序报错“Failed to bind to”绑定端口失败,如下图 我首先怀疑是端口被其他程序占用了,关闭程序后查看了下