Вот такой код. Сразу после подключения клиента вылетает исключение NullPointerException ругаясь на 23 строку. Убираем первый блок try-finally (комментируем строки 23-32). Все ок никакого исключения не вылетает. Как его избежать-то? Если мне нужен первый блок try-finally
| Код | import java.io.*; import java.net.*;
class IncomingClients extends Thread { //треды для присоединенных клиентов private Socket socket; private BufferedReader in; private PrintWriter out; public IncomingClients(Socket s) throws IOException { socket = s; BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); //StrIn = in.readLine(); //входящий поток в строковую, тк требует у класса обработки исключения IOException
InetAddress socketAddress = socket.getInetAddress(); //будет вариант в одну строку, пиши String hostIncoming = socketAddress.getHostName();
System.out.println("Client host: " + hostIncoming); start(); } public void run() { //цикл приема сообщений, на данный момент будет отвечать зеркально клиенту try { while (true) { String strIn = in.readLine(); System.out.println(strIn); } } catch (IOException e) { System.out.println("IO Exception"); } finally { try { socket.close(); } catch (IOException e) { System.err.println("error close"); } } //String strIn = in.readLine(); //System.out.println(strIn); } }
public class Srv { public static final int PORT = 8383; public static void main (String[] args) throws IOException { ServerSocket srvSocket = new ServerSocket(PORT); System.out.println("Start " + srvSocket); try { while (true) { //бесконечно ждем клиентов Socket cltSocket = srvSocket.accept(); System.out.println("connect " + cltSocket); new IncomingClients(cltSocket); } } finally { System.out.println("close"); srvSocket.close(); } } }
|
|