草庐IT

Networking

全部标签

java - 是否可以仅使用 1 个 UDPSocket 在同一端口上发送/接收?

我正在尝试发送一个DatagramPacket,然后必须等待来自服务器的确认,以便我知道我是否必须重新发送相同的数据包或发送下一个数据包......我在客户端使用相同的套接字,发送数据包并接收确认(ack),在服务器端,另一个套接字用于接收数据包,然后发送致谢客户..第一个问题是客户端正在发送数据包,服务器正在接收它,然后向客户端发送确认,但客户端在收到确认包时阻塞。我正在制作一些System.out.println来确定问题出在哪里,但我找不到解决这个问题的方法。第二个问题是服务器仍然总是在接收数据,并且不要等待客户端发送一些东西,我检查了因为我得到了那些行(比如“得到了长度为xxx

java - url.openStream 有害吗?

我使用java.net.URL.openStream()方法从服务器检索内容。我最近遇到了一个问题,HTTP响应代码指示错误,但没有抛出异常,流仍然被读取。这导致错误在执行过程中出现得更晚,并被证明是一个转移注意力的问题。据我所知,当您使用此方法打开流时,无法检查HTTP响应代码。我能找到正确处理此问题的唯一方法是在打开流之前获取连接:HttpURLConnectionconn=(HttpURLConnection)url.openConnection()#Codeupdatedwithscotth'ssuggestionif(!String.valueOf(conn.getRespo

java - 网络 Swing 游戏中的多线程 : using invokeLater vs locks

我正在编写一个简单的自上而下的太空游戏,并且正在扩展它以允许通过网络与多个玩家一起玩。我读了很多书,但这是我第一次这样做,我希望能得到一些关于选择合理设计的建议。我的GUI是使用Swing编写的。每秒30次,计时器触发,并根据内存中gameWorld对象中的数据重新绘制我的GUI(本质上是带有位置的船舶和射弹列表等)。游戏世界的物理更新也是使用这个计时器进行的。因此,对于单人游戏实现,一切都发生在EDT上,并且效果很好。现在,我有单独的线程处理来自其他玩家的传入数据包。我想根据这些数据包包含的内容更新我的gameWorld对象中的数据。我的问题是,我应该使用invokeLater来进行

java - 如何使用 Java 发送 M-SEARCH 查询

我的网络上有一个Roku设备,我希望能够以编程方式发现它。officialRokudocumentation说:ThereisastandardSSDPmulticastaddressandport(239.255.255.250:1900)thatisusedforlocalnetworkcommunication.TheRokurespondstoM-SEARCHqueriesonthisipaddressandport.Inordertoqueryfortherokuipaddress,yourprogramcansendthefollowingrequestusingtheht

java - 我应该从两端关闭套接字吗?

我有以下问题。我的客户端程序监视本地网络中服务器的可用性(使用Bonjour,但它不支持mater)。一旦服务器被客户端应用程序“注意到”,客户端就会尝试创建套接字:Socket(serverIP,serverPort);。在某些时候,客户端可能会丢失服务器(Bonjour说服务器在网络中不再可见)。因此,客户端决定关闭套接字,因为它不再有效。某时服务器再次出现。因此,客户端尝试创建一个与该服务器关联的新套接字。但!服务器可以拒绝创建此套接字,因为它(服务器)已经有一个与客户端IP和客户端端口关联的套接字。发生这种情况是因为套接字是由客户端而不是服务器关闭的。它会发生吗?如果是这样,如

Java UrlConnection 在高负载下触发 "Connection reset"异常。为什么?

我在Linux(Ubuntu10)64位服务器上使用Java从AmazonS3流式传输文件。我为每个文件使用一个单独的线程,每个文件打开一个HttpURLConnection,它同时下载和处理每个文件。在我达到一定数量的流(通常大约2-300个并发流)之前,一切都运行良好。在此之后的不规则点,多个(比如10个)线程将开始java.net.IOException:Connectionreset错误同时。我正在限制下载速度,远远低于m1.large实例的250mbit/s限制。所有其他服务器方面的负载也微不足道(例如CPU、平均负载和内存使用都很好)。可能是什么原因造成的,或者我该如何追踪

java - 在 IBM Websphere 环境中设置负载平衡器服务器

我正在使用websphere网络部署。我编写了一个应用程序,该应用程序部署在同一单元的两个不同节点上。现在我想用粘性session选项对两台服务器进行负载平衡。有没有办法在websphere环境中创建负载平衡器服务器?我看到一个叫做按需路由的选项,它等于负载均衡器吗?非常感谢您对此的帮助。顺便说一句,我正在使用websphere8.5.x。谢谢。 最佳答案 是的,OnDemandRouter是WebSphere单元的本地负载平衡器。然后您只需使用“权重”功能来控制请求的分配。设置权重-在管理控制台中,转到“服务器>集群>[您的集群类

java - 如果端口对多播组无关紧要,为什么 DatagramSocket.joinGroup() 方法采用 SocketAddress?

我只是好奇。那是一个API错误吗?当您加入多播组时,您不使用端口,只使用多播组的多播地址(IP),对吧?当使用PORT时,是否会出现这种情况? 最佳答案 这个问题最好改写为“为什么DatagramSocket.joinGroup()需要一个SocketAddress参数,它可以包含一个端口号?”SocketAddress中的端口号被忽略。多播完全是根据IP地址定义的。我认为使用SocketAddress的原因是它可以暗示一个未解析的地址,其中InetAddress暗示一个已解析的地址,你不能解析多播地址,但不要引用我的话;-)

java - 使用 Java 从 BAT 文件获取输出

我正在尝试运行.bat文件并获取输出。我可以运行它,但我无法在Java中获得结果:Stringcmd="cmd/cstartC:\\workspace\\temp.bat";Runtimer=Runtime.getRuntime();Processpr=r.exec(cmd);BufferedReaderstdInput=newBufferedReader(newInputStreamReader(pr.getInputStream()));Strings;while((s=stdInput.readLine())!=null){System.out.println(s);}结果为nu

Java 网络 : evented Socket/InputStream

我正在Java的套接字上实现一个面向事件的层,我想知道是否有一种方法可以确定是否有待读取的数据。我通常的方法是从套接字读取到缓冲区,并在缓冲区填充给定字节数时调用提供的回调(如果每次到达时都需要触发回调,则可以为0),但我怀疑Java已经在为我做缓冲。InputStream的available()方法是否可靠?我应该只read()并在Socket之上做我自己的缓冲吗?还是有别的办法? 最佳答案 简而言之,不。available()不可靠(至少不适合我)。我推荐使用java.nio.channels.SocketChannel连接Se