Java-多次使用写字节后程序崩溃
我有一个非常简单的多线程服务器,它只打印回客户端的输入。我遇到的问题是,客户端在多次使用outToServer.writeBytes后崩溃 我的客户端源代码如下:Java-多次使用写字节后程序崩溃,java,sockets,dataoutputstream,Java,Sockets,Dataoutputstream,我有一个非常简单的多线程服务器,它只打印回客户端的输入。我遇到的问题是,客户端在多次使用outToServer.writeBytes后崩溃 我的客户端源代码如下: public class Client { public void run() throws Exception{ String sentence; Socket clientSocket = new Socket("localhost", 25565); Buffered
public class Client {
public void run() throws Exception{
String sentence;
Socket clientSocket = new Socket("localhost", 25565);
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
while (true){
sentence = inFromUser.readLine();
if(!sentence.equalsIgnoreCase("exit")){
outToServer.writeBytes(sentence + '\n');
} else {
break;
}
}
clientSocket.close();
}
}
我已经对错误做了一些研究,可能是我的大学网络终止了连接,但考虑到它允许第一次连接,这没有多大意义
此外,这里还有一个错误:
java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.DataOutputStream.writeBytes(Unknown Source)
at com.cs.Client.run(Client.java:21)
at com.cs.Main.main(Main.java:14)
在Client.java的第21行中,有写字节打开连接不像打开一扇门。连接是一个虚拟概念,而不是一个保证的路径 因此,当您打开一个连接时,基本上您已经重新配置了一些操作系统管理的内存区域,以便知道当您将数据写入特定的内存位置时,它需要在线路上复制该数据 这意味着打开连接并不总是一个共享事件,因为远程计算机可能无法完全保证程序的路径,甚至可能不知道请求了远程程序的路径 因此,在网络编程中,尽管API的措辞暗示了其他方面,但在从远程机器获得第一个响应之前,您没有功能连接 我会看看你是否可以启动wireshark,看看你是否可以在发送之前捕获数据,我会检查任何连接参数,并尝试独立于程序验证连接的可达性 上述过程将帮助您从客户的角度快速确定哪个网络组件有故障;然而,90%的情况下,这是一件非常琐碎的事情,比如软件防火墙阻止所需的端口 此外,您还可以使用telnet提供类似的功能,但要连接到非标准端口
telnet hostname 25565
祝你好运,而且你的代码看起来很合理,我会花一点时间确保你在环境可能出现故障时不会关注代码。什么是异常?请发布异常。如果它没有被捕获,至少没有被记录,那才是真正的问题。很可能它会告诉你出了什么问题。此外,这是一个新手错误,但假设网络连接在获得后可用是非常常见的,只要您愿意。事实并非如此,所以如果你真的想拥有一个健壮的程序,就不要像解决问题那样解决问题。我知道我忘了什么。我现在要添加一个例外是的,我看到了那篇帖子,因此在我的问题中声明:我对错误做了一些研究,可能是我的大学网络破坏了连接。不过,我还是发布了这个问题,以防它与我的代码有关。无论如何,引用我的问题,它没有多大意义,因为它允许第一个连接也可能希望刷新输出流。但是异常表明刷新输出流不是您当前遇到的问题。