jjzjj

ServerSocket

全部标签

java - Java ServerSocket accept client后如何获取绑定(bind)到同一本地端口的新套接字?

我对Socket和ServerSocket端口的用法感到困惑。Oracle'sjavatutorialaboutsockets说以下内容:WhatIsaSocket?Normally,aserverrunsonaspecificcomputerandhasasocketthatisboundtoaspecificportnumber.Theserverjustwaits,listeningtothesocketforaclienttomakeaconnectionrequest.Ontheclient-side:Theclientknowsthehostnameofthemachine

java - 为什么 Java ServerSocket accept() 返回一个与 ServerSocket 具有相同端口的套​​接字?

在服务器端,我使用这段代码:ServerSocketserver=newServerSocket(1234);Socketserver_socket=server.accept();我发现服务器正在监听1234端口。当连接一个或多个客户端套接字时,它们都使用同一个端口1234!这真是令人困惑:我记得多套接字不能使用同一个端口,对吗?谢谢。 最佳答案 TCP连接由四个数字标识:客户端(或对端1)IP服务器(或对端2)IP客户端端口服务器端口一个典型的TCP连接打开方式如下:客户端IP由客户端的ISP或NAT提供。服务器IP由用户提供或

java - 寻找两个空闲的 tcp 端口

我知道下面的代码可以(可能不是很有效)在Java中找到空闲的TCP端口:publicstaticintfindFreePort(){intport;try{ServerSocketsocket=newServerSocket(0);port=socket.getLocalPort();socket.close();}catch(Exceptione){port=-1;}returnport;}(SO-forexample中有一些相关问题)。我不明白的是为什么(或是否)两次连续调用此方法一定会返回两个不同的端口。这是假定的,例如,here(搜索对findFreePort方法的调用)。这是

java - 在 Java 中,如何从已打开的 C 套接字的文件描述符中获取 Socket 或 DatagramSocket?

我有一个分为两部分的Linux程序。一部分进行NAT遍历以获得UDP套接字(UDP打洞)或TCP套接字(TCP打洞)。第一部分是用C编写的,以允许促进或增强NAT遍历过程的native功能。第二部分实际使用的是通过第一部分执行的NAT穿越获得的已连接套接字。问题来了。我希望第一部分(获取套接字的部分)独立于第二部分(将套接字用于特定应用目的的部分)。例如,我希望第一部分可重复用于各种不同的应用程序,这些应用程序都需要在对等点之间建立UDP和TCP连接。现在,我希望第二部分(应用程序部分)用Java而不是C或C++编写。我希望第二部分使用由负责NAT遍历的C代码获得的套接字连接。假设第一

java - 如何将 serversocket 绑定(bind)到特定 IP?

如果我有一个表示IP地址(IPv4或IPv6)的String,我该如何创建一个ServerSocket并绑定(bind)到这个IP而不必关心IP是否传入,是IPv4还是IPv6?我看到有一个构造函数:ServerSocket(intport,intbacklog,InetAddressbindAddr)但InetAddress似乎没有提供任何构造函数,它的子类具有特定于IPv4的名称和IPv6。那么如何将套接字绑定(bind)到IP呢? 最佳答案 可以使用工厂方法INetAddress.getByName.它会找出要使用的子类。例如

java - 停止接受新的 TCP 连接而不丢弃任何现有连接

我有两台服务器监听负载均衡器后面的TCP端口。负载平衡器可以检测来自客户端的TCP连接尝试是否不成功,并在不断开该连接的情况下重试到第二个服务器。我希望能够在不删除单个客户端集合的情况下关闭这两个服务器中的任何一个进行维护。我的服务器使用这段代码来处理客户端请求:ServerSocketFactoryssf=...ServerSocketserverSocket=ssf.createServerSocket(60000);try{while(true){Socketsocket=serverSocket.accept();...//Dotheprocessing}}catch(IOEx

android - 无法在 Android 上使用 ServerSocket

我正在尝试在Android设备上使用ServerSocket监听一个端口。我希望能够使用同一网络上的计算机通过WiFi连接到此端口。将它绑定(bind)到端口时我没有异常,但是当我检查netstat时它说:ProtoRecv-QSend-QLocalAddressForeignAddressStatetcp00(null):4040(null):*LISTEN我尝试了无数种方法将它绑定(bind)到本地主机,0.0.0.0,设备的WiFiLANIP地址,带有SocketInetAddress和InetAddress.getByName。似乎没有任何效果。当我尝试从同一WiFi中的计算机

java - ServerSocket accept() 方法

当我使用ServerSocket类的accept方法时,谁知道端口是如何选择的?是否可以为该方法可以选择的端口定义一个范围?我可以按顺序一个接一个地“获取”端口吗?ServerSocketsSocket=newServerSocket(5050);Socketsocket=sSocket.accept(); 最佳答案 图表不正确(在O'Reilly网站的unconfirmederrata中列出)。客户端随机选择它的端口(您不需要在Java中做任何特殊的事情)并连接到您指定的任何端口上的服务器。使用netstat命令行工具,您可以看到

java - serversocket 类如何在同一端口上为多个客户端连接提供服务?

当使用Socket类时,一个人是在某个端口上建立到服务器的TCP连接,但在服务器上,ServerSocket能够为每个接受请求处理多个客户端连接,并将其委托(delegate)给一个线程来处理请求。但是一个ServerSocket类怎么可能在同一个端口上接受多个tcp连接。这是否意味着由操作系统决定它允许多少连接或允许的最大积压是多少,这是否可以由操作系统之上的应用程序控制(我的意思是java受操作系统支持的最大积压限制)以及TCP规范中是否存在积压连接的限制?最好的问候,凯沙夫 最佳答案 TCP连接由一组唯一的(源IP、源端口、目

Java : Is ServerSocket. 接受线程安全吗?

在学校的一个项目中,我们正在用Java5.0制作一个多线程服务器。该项目以服务器的并发方面为中心。我们有一些专用于处理请求的线程。为此,他们调用ServerSocket.accept()来接受新连接。我们的选择是启动一堆它们并让它们在假设两个线程不能同时接受()同一连接的情况下处理传入连接。但现在的主要问题是我们无法在API中找到任何可以保证这种行为的东西(或者我们看起来不对),除了“有效”的证据之外我们什么也没有。有人可以找到有关java方法的此类信息的来源吗? 最佳答案 简短回答:如果文档没有指定某些东西是线程安全的,那么您必须