MainServer.java
import java.net.*;
import java.io.*;
public class MainServer{
public static int PORT=1234;
public static void main(String args[]) {
ServerSocket serverSocket=null;
Socket socket=null;
try{
serverSocket=new ServerSocket(PORT);
}catch(Exception e){
System.out.println("Error is :"+e);
}
while(true){
socket=serverSocket.accept();
SubServer sub=new SubServer(socket);
sub.start();
}
serverSocket.close();
}
}
SubServer.java
import java.net.*;
import java.io.*;
public class SubServer extends Thread {
private Socket socket=null;
String receiveData;
public SubServer(Socket socket){
this.socket=socket;
}
public void run(){
DataInputStream dis=new DataInputStream(socket.getInputStream());
receiveData=dis.readLine();
System.out.println("client Message: "+receiveData);
}
}
The error is :
MainServer.java:27: error: unreachable statement
serverSocket.close();
^
MainServer.java:23: error: unreported exception IOException; must be caught or declared to be thrown
socket=serverSocket.accept();
^
MainServer.java:27: error: unreported exception IOException; must be caught or declared to be thrown
serverSocket.close();
^
Note: ./SubServer.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
3 errors
I saw many tutorial and reference but i can not solve my problem.Single server and single clients working fine but multiple client can not communicate in a single server.
I use a Thread
class to handle a multiple client but it gives a above error.
Where is my mistake i can not find.Thanks in advance.
Here :
while(true){
socket=serverSocket.accept();
SubServer sub=new SubServer(socket);
sub.start();
}
You wrote an infinite loop : while(true){...}
. So, any statement after the while
statement is not reachable.
Whereas the compilation error :
MainServer.java:27: error: unreachable statement serverSocket.close();
serverSocket.close();
should not required or should make part of a hook shutdown such as :
Runtime.getRuntime().addShutdownHook(new Thread(t-> serverSocket.close()));
These two other compilation errors :
MainServer.java:23: error: unreported exception IOException; must be caught or declared to be thrown socket=serverSocket.accept();
MainServer.java:27: error: unreported exception IOException; must be caught or declared to be thrown serverSocket.close();
refer to the checked exception IOException
that is not handled (caught or thrown).
As Thread.run()
doesn't declare any exception, you have to catch it :
public void run(){
try {
DataInputStream dis = new DataInputStream(socket.getInputStream());
receiveData = dis.readLine();
System.out.println("client Message: " + receiveData);
} catch (IOException e) {
// handling of the exception : logging and probably end of execution of
the current thread
}
}
As a side note, invoking the deprecated readLine()
method of DataInputStream
object is not a good idea. Prefer a BufferedReader
to :
This method does not properly convert bytes to characters. As of JDK 1.1, the preferred way to read lines of text is via the BufferedReader.readLine() method.