Я пытался создать приложение клиент-сервер, где клиент генерирует случайное число и отправляет на сервер n строк. Соединение закрыто, отправка строки «BYE». После этого сервер должен рассчитать общую длину полученных строк и распечатать ее.
Проблема в том, что когда мой клиент пытается подключиться к серверу, он выдает исключение «java.net.SocketException: Connection reset» и вылетает.
Вот мой код клиента:
import java.net.*;
import java.io.*;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ClientStringa {
public static void main(String[] args) {
try{
Socket socket = new Socket("localhost", 5555);
PrintWriter out = new PrintWriter(socket.getOutputStream());
Random r = new Random();
int N = r.nextInt(100);
for(int i=1;i<=N;i++){
out.println("String" +i);
}
out.flush();
}
catch (IOException ex) {
Logger.getLogger(ClientStringa.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Код моего сервера:
import java.io.*;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ServerStringa {
public static void main(String[] args) {
try {
ServerSocket socket = new ServerSocket(5555);
while(true){
System.out.println("Waiting for client connections...");
Socket client = socket.accept(); //connessione dei client
ThreadStringa thread = new ThreadStringa(client);
thread.start();
}
} catch (IOException ex) {
Logger.getLogger(ServerStringa.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
И мой код потока (поскольку сервер должен отвечать на большее количество клиентов):
import java.net.*;
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ThreadStringa extends Thread{
Socket client;
public ThreadStringa(Socket client) {
this.client = client;
}
public void run(){
try {
// DataInputStream input = new DataInputStream(client.getInputStream());
String message;
int sum=0;
InputStream input = client.getInputStream();
InputStreamReader input2 = new InputStreamReader(input);
BufferedReader in = new BufferedReader(input2);
while((message= in.readLine()) != null){
if(message.equals("BYE")){
break;
}
sum+=message.length();
}
System.out.println("Total length of received strings: " + sum);
input.close();
client.close();
}
catch (IOException ex) {
Logger.getLogger(ThreadStringa.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Полная ошибка, которую я получаю на консоли сервера:
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at serverstringa.ThreadStringa.run(ThreadStringa.java:27)