簡體   English   中英

java連接重置錯誤

[英]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)

在您的服務器示例中,即使客戶端兩次寫入DataOutputStreamreadUTF只能在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM