簡體   English   中英

使用bufferedReader.readLine()從我的Socket輸入流中讀取時,它拋出SocketException,指出“連接重置”

[英]Reading from my Socket input stream using bufferedReader.readLine(), it throws an SocketException stating “Connection reset”

我正在創建兩個套接字:客戶端套接字和服務器套接字。

ServerSock類:

public class ServerSock {

    public static void main(String args[]) throws Exception{

        //creating welcome socket @param: port number
        System.out.println("Server is started...");
        ServerSocket serverSocket = new ServerSocket(55555);

        System.out.println("Server is wating for client request...");

        //creating individual sockets for clients
        Socket socket0 = serverSocket.accept();

        System.out.println("Client connected...");

        //reading the input data
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket0.getInputStream()));

        //reading the data from bufferedReader
        String str = bufferedReader.readLine();

        //console the data
        System.out.println(" client data : " + str);
    }
}

ClientSocket類:

public class ClientSocket {

    public static void main(String args[]) throws Exception{

        //ip address of the server
        String ip = "localhost";
        //port number of the application
        int port = 55555;

        //creating a socket
        Socket socket = new Socket(ip, port);

        //data to send
        String data0 = "lakshan waruna";

        //converting data to ByteStream param: where to send the data
        OutputStreamWriter os = new OutputStreamWriter(socket.getOutputStream());

        //writing the data
        os.write(data0);
        os.flush();
    }
}

ServerSock一直運行到啟動客戶端套接字為止。 它還在ServerSock類中打印“ client connected”語句。 但是,當它嘗試使用語句String str = bufferedReader.readLine();從bufferedReader讀取數據時String str = bufferedReader.readLine(); ,則拋出SocketException指出“連接重置”。 如何解決此問題?

您的問題是您沒有在客戶端中關閉Socket ,當遠程Socket不良地關閉了連接時,通常會拋出“連接重置”(在這種情況下,因為您不調用Socket.close() 如果您會注意到它會起作用,但您可能想的很好,為什么能解決此問題? 為什么不只給我數據,然后下次讀取告訴我Socket已關閉,它確實可以,但是由於您使用的是readLine() ,它會一直讀取直到收到\\n\\r或給定的InputStream返回小於零的值。 read 它幾乎一直在讀取,直到收到完整的一行為止(要聲明為System.out.println類的完整行,您只是在末尾添加\\n ),如果您添加\\n ,它仍未找到新行\\n在消息的最后,你會發現它也可以工作。

另外,刪除PrintWriter ,您將永遠不會使用它。

總是關閉襪子

測試了您的代碼,為我工作。

編輯錯字,並包含指向有關問題的合理信息的鏈接

連接重置的可能原因可能是套接字在發送數據之前已關閉。

java.net.SocketException:連接重置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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