[英]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
,您將永遠不會使用它。
總是關閉襪子 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.