草庐IT

Java套接字性能瓶颈: where?

我最近开始开发一个大量使用网络的应用程序。第一次尝试是使用RMI,出于几个原因,我们切换到纯套接字。然而,当通过网络测试套接字时,甚至在本地主机上,我们的速度下降到25个请求/秒。使用RMI时,它高出两个数量级。通过更多的测试,我们获得了以下信息(针对本地主机):始终发送相同的对象:31628个请求/秒始终发送新对象:25个请求/秒仅对象创建速率:每秒3-4百万(因此这不是瓶颈)这是客户端代码:(服务器端只是回复一个“ACK”)publicstaticvoidmain(String[]args)throwsIOException,ClassNotFoundException{Socke

java - 通过java中的套接字发送屏幕截图(bufferedImage)

我正在通过套接字发送一个缓冲图像,我正在使用this中的示例帖子:发件人BufferedImageimage=....;ImageIO.write(image,"PNG",socket.getOutputStream());接收者BufferedImageimage=ImageIO.read(socket.getInputStream());它有效-如果且仅当我在这一行之后关闭发送方的outputStream:ImageIO.write(image,"PNG",socket.getOutputStream());除了关闭outputStream,我还能做些什么吗?另外,还有什么我可以做

java - 单击取消按钮 showInputDialog

我有一个关于按下inputDialoguebox的取消按钮的问题。我之前问过类似的问题,所以如果我似乎重复了一遍,我深表歉意。我遇到的主要问题是,无论我是否按下取消,我的代码都会执行,并且即使我没有添加任何输入,也确实会建立套接字连接。为什么会发生这种情况,我该如何避免这种情况?Stringinput="";try{InetAddresshost=InetAddress.getLocalHost();StringhostAddress=host.getHostAddress();//settinglabeltohostnumbersoastoknowwhatnumbertouselab

java - 我已经创建了一个带有套接字的 Java 服务器,如何打印到所有套接字?

我已经尝试了一段时间,我希望多个客户端同时接收多个输入。有一个问题,如果一个客户端说',我希望服务器向所有客户端打印“嗨”print2all嗨'。我知道如何处理它以打印它,只是打印给所有客户就是问题所在。这是我目前所拥有的。服务器try{try{server=newServerSocket(25565);}catch(Exceptione){e.printStackTrace();}while(isListening){newSocketThread(server.accept()).start();}server.close();}catch(Exceptione){e.printS

java - 当客户端使用 readTimeout 关闭连接时服务器会发生什么

当客户端使用readTimeout关闭与API的连接时,服务器会发生什么。请求的执行将完成还是一旦超时发生就会中断,或者执行将完成并且响应流被服务器应该发送给用户的响应 最佳答案 超时是关闭连接的一种不整洁的方式-当您的连接端超时时,您很可能无法告诉另一端您已经超时并正在关闭连接。也就是说,连接不是通过双方的协调行动正式关闭的,它只是一方决定将其视为已死亡。解决这个问题的方法是在连接的两端都有超时-如果一侧超时,另一侧最终也会超时。至于在服务器端到底发生了什么:由于服务器在自己的超时到期之前不知道连接已死,因此它会认为连接良好,并且

java - 关闭套接字和 ObjectOutputStream 的正确方法?

我正在用Java编写一个网络应用程序,以便在客户端和服务器之间进行通信,我使用序列化对象来表示数据/命令并通过对象输出/输入流发送它们。我在完全关闭连接时遇到问题,我认为我遗漏了一些我并不真正了解的基本知识,我以前从未使用过带有序列化的套接字。无论我尝试关闭连接的顺序是什么(先关闭客户端,先关闭服务器),都会抛出ConnectionReset异常。我无法捕获此异常,因为客户端在另一个线程中运行,程序的其余部分不断地监听消息,这是必须完成的,因为在Javasocket.read()中是一种阻塞方法。关闭我用来发送对象的套接字的正确方法是什么? 最佳答案

java.net.SocketTimeoutException : Read timed out

我有一个客户端服务器架构的应用程序。客户端将JavaWebStart与JavaSwing/AWT结合使用,而sert将HTTP服务器/Servlet与Tomcat。通信是由对象的序列化产生的,创建一个ObjectOutput序列化一个字节数组并发送到服务器分别调用了ObjectInputStream和反序列化。应用程序遵循与某个特定的正确通信开始显示错误的并发时间“SocketException读取超时”。当服务器调用该方法时发生错误我的servletdoPost方法中的ObjectInputStream.getObject()。tomcat会变慢并且错误开始减少服务器响应时间,直到崩

java - DataInputStream.read() 与 DataInputStream.readFully()

我正在制作一个简单的TCP/IP套接字应用这样做有什么不同:DataInputStreamin=newDataInputStream(clientSocket.getInputStream());byte[]buffer=newbyte[100];in.readFully(buffer);与这样做相比:DataInputStreamin=newDataInputStream(clientSocket.getInputStream());byte[]buffer=newbyte[100];in.read(buffer);我查看了文档,它们具有完全相同的描述。readFully()和rea

Java OutputStream 仅在关闭时刷新数据

Socketsocket=newSocket("192.168.178.47",82);OutputStreamout=socket.getOutputStream();out.write("{\"phone\":\"23456789\"}".getBytes());out.flush();//服务器InputStreamin=client.getInputStream();ByteArrayOutputStreambOut=newByteArrayOutputStream();inti=0;while((i=in.read())>=0){bOut.write(i);}Stringco

java - 我如何嗅探 Java 中的网络流量?

我只是四处寻找如何用Java编写一个程序来嗅探我的网络流量,但我找不到任何东西。我想知道是否有任何方法可以查看经过的网络流量。我听说过一个关于Socket的想法,但我不知道那是如何工作的。所以无论如何,只是寻找一个API或一种自己编写它的方法。编辑:我很乐意使用API,但我也想了解使用Socket嗅探流量的方法。 最佳答案 jpcap,jNetPcap--这些是Java中的pcap包装器项目。Kraken--类似的项目,有很多例子记录在案。来自Kraken网站的简单示例:publicstaticvoidmain(String[]ar