草庐IT

java - 我可以关闭并重新打开套接字吗?

我学习了一个使用套接字的例子。在此示例中,客户端向服务器发送请求以打开套接字,然后服务器(监听特定端口)打开套接字,一切正常,套接字从双方(客户端和服务器)“打开”。但我仍然不清楚这东西有多灵活。例如,客户端是否可以关闭一个打开的(从两端)套接字并再次重新打开它(在服务器保持套接字打开的情况下)。服务器是否有可能“知道”客户端关闭了套接字?客户端是否有可能知道服务器端关闭了套接字?已添加:还有一件对我来说很重要的事情。如果应用程序(不是主服务器或客户端)崩溃、异常终止、终止,会发生什么情况?它会关闭应用程序端打开的所有套接字吗?添加2:如果套接字一侧的应用程序关闭(终止、关闭、终止)然

java.net.SocketException : Network is unreachable: connect 异常

我正在尝试使用此方法从Web服务器下载xml文本文件:staticvoiddownload(Stringurl,StringfileName)throwsIOException{FileWriterxmlWriter;xmlWriter=newFileWriter(fileName);System.out.println("URLtodownloadis:"+url);//hereExceptionisthrown/////////////////////////////////BufferedReaderinputTxtReader=newBufferedReader(newBuff

java - 如何让客户端套接字等待服务器套接字

如果客户端套接字在服务器套接字之前打开,Java将生成一个ConnectionException。所以我必须检查服务器是否可用并在执行之前一直等待socketChannel.open(主机名,端口)在客户端线程中。我找到了一个相关的API:InetAddress.getByName(主机名).isReachable()但是,这仍然无法判断特定端口上的套接字是否打开。我认为这个问题应该很常见,但我没有从谷歌和其他地方得到非常有用的信息。 最佳答案 booleanscanning=true;while(scanning){try{soc

java - 如何绕过超时时间立即关闭套接字?

在Java中,当您关闭套接字时,它不再做任何事情,但它实际上会在超时后关闭TCP连接。我需要使用数以千计的套接字并且我希望它们在我关闭它们之后立即关闭,而不是在超时期限之后,这浪费了我的时间和资源。我能做什么? 最佳答案 我发现通过使用socket.setReuseAddress(boolean),您可以告诉JVM重用该端口,即使它处于超时期限也是如此。 关于java-如何绕过超时时间立即关闭套接字?,我们在StackOverflow上找到一个类似的问题: h

java - 无法访问类型 ... 的封闭实例

出于教育目的,我尝试制作一个服务器和客户端,其中服务器从多个客户端接收数据并回显每条消息。问题是当我试图让服务器一次向所有客户端发送回显时。publicclassSocketServer{ArrayListts=newArrayList();ServerSocketserv;staticMainServerThreadmst=newMainServerThread();//^IDE(eclipse)underlinesthisastheproblemSocketServer(){EventQueue.invokeLater(mst);}publicstaticvoidmain(Stri

java - 即时通讯工具 TCP 或 UDP 哪个更好?

我需要在Java语言中使用纯套接字实现客户端/服务器即时消息。服务器应该为大量客户端提供服务,我需要决定应该使用哪个套接字-TCP或UDP。谢谢,科斯塔。 最佳答案 TCP原因:TCP:“绝对保证传输的数据保持完整,并按照发送时的相同顺序到达。”UDP:“根本无法保证发送的消息或数据包一定会到达。”了解更多信息:http://www.diffen.com/difference/TCP_vs_UDP您是否希望您的聊天消息可能丢失?编辑:我错过了关于“大型聊天程序”的部分。我认为由于聊天程序的性质,它需要一个TCP服务器,我无法想象用户

Java TCP 套接字嗅探

我正在使用TCP套接字在同一台计算机(本地主机)上使用特定端口号在服务器和客户端程序之间通信数据。我需要一个可以捕获通过该套接字发送/接收的数据的软件吗?(或)在Java中从指定端口嗅探数据包的最简单方法是什么? 最佳答案 我建议使用Wireshark。它易于使用并可在许多平台上运行。http://www.wireshark.org/ 关于JavaTCP套接字嗅探,我们在StackOverflow上找到一个类似的问题: https://stackoverflo

java - 如何在 Java 中将数组写入 OutputStream?

我想通过Socket发送多个随机值。我认为数组是发送它们的最佳方式。但我不知道如何将数组写入SocketOutputStream?我的Java类:导入java.io.ByteArrayOutputStream;导入java.io.IOException;导入java.io.InputStream;导入java.net.Socket;导入java.io.*;导入java.util.Random;publicclassNodeCommunicator{publicstaticvoidmain(String[]args){try{Socketnodejs=newSocket("localho

连接到服务器时 Java 套接字阻塞

我正在尝试使用Java套接字连接到服务器。我正在尝试从端口80连接到90intport;Socketclientsocket;Stringhostname="www.google.com";for(port=80;port当我尝试连接到任何网站(如google.com或w3schools.com)时,我的程序在socket()调用端口号(80除外)时挂起。由于这些网站不在端口81-90上提供服务,因此它应该引发异常,但它却被阻止了。对于端口80,它工作正常。当我尝试连接到安装在我机器上的apache服务器时,它不会阻止任何端口号并给我连接拒绝错误,这是显而易见的行为。那么为什么会这样。

java - getLocalAddress() 返回 0.0.0.0

我正在尝试使用套接字编写程序,我需要获取自己的本地IP地址。当我在套接字中使用getLocalAddress时,我只得到0.0.0.0。这是我的一小段代码:DatagramSocketsocket;DatagramPacketpacoteEnvio=newDatagramPacket(msgByte,msgByte.length,addr,6500);socket=newDatagramSocket();System.out.println("Localaddress="+socket.getLocalAddress());socket.send(pacoteEnvio);你有什么想法