[英]java Connection reset error
我是Java的新手。 如果您發現這是一個非常基本的問題,請原諒。在堆棧溢出中已經有很多關於此的答案,我幾乎了解了所有可能在堆棧溢出以及其他論壇中獲得的幫助。 不幸的是,他們都沒有幫助我。
我有一個客戶端/服務器程序,其中客戶端將字符串發送到服務器,而服務器只是將另一個字符串附加到客戶端發送的字符串,然后將其發送回客戶端。
服務器程序看起來像這樣。
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class server {
public static void main(String[] args) {
try
{
ServerSocket server = new ServerSocket(7300);
Socket s = server.accept();
DataInputStream inp = new DataInputStream(s.getInputStream());
DataOutputStream out = new DataOutputStream(s.getOutputStream());
String str =inp.readUTF();
str = str+" buddy!";
out.writeUTF(str);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
客戶看起來像這樣。
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.*;
public class client {
public static void main(String[] args) {
try
{
Socket s = new Socket("192.168.1.3",7300);
DataInputStream inp = new DataInputStream(s.getInputStream());
DataOutputStream out = new DataOutputStream(s.getOutputStream());
out.writeUTF("hi");
System.out.println(inp.readUTF());
Thread.sleep(2000);
out.writeUTF("hello");
System.out.println(inp.readUTF());
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
客戶端寫“ hi”時,一切正常,當客戶端開始發送“ hello”時,出現連接重置錯誤。 我沒有弄錯我在做什么,請幫助我解決這個問題。
我得到的錯誤輸出看起來像這樣。
hi buddy!
java.net.SocketException: Connection reset by peer: 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.write(Unknown Source)
at java.io.DataOutputStream.writeUTF(Unknown Source)
at java.io.DataOutputStream.writeUTF(Unknown Source)
at sokry.client.main(client.java:18)
在您的服務器示例中,即使客戶端兩次寫入DataOutputStream
, readUTF
只能在DataInputStream
上調用一次。 因此,只需添加
str = inp.readUTF();
str = str + " buddy!";
out.writeUTF(str);
在您的服務器示例中,在最后一個out.writeUTF(str)
,將解決您的問題。
對client.java文件的下一行進行評論,然后try.it可以工作
Thread.sleep(2000);
`//out.writeUTF("hello“);; //System.out.println(inp.readUTF()); 因為當您從客戶端向服務器發送“ hi”並且服務器給出答復時,它完成了工作並且停止了連接,但是在client.java中,您向服務器發送了另一個請求,但服務器處於靜止狀態。
您應該啟動服務器,直到客戶端完成工作為止。
希望它將等待
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.