Я пытаюсь сделать некоторые сокеты программирования в Java.Я написал эту программу для создания сервера и клиента на моем локальном компьютере и создания двух отдельных потоков для ввода и вывода сокетов в файл Se.java .Точно так же два отдельных потока для ввода и вывода сокета на стороне клиента в файле Cl.java
Теперь, когда я компилирую их оба, они не показывают ошибок или исключений, но когда я его запускаю,Сервер с некоторым исключением продолжает работу, но клиент падает.
Я не знаю, что кажется неправильным. Все, что я хочу сделать, - это создать два потока для каждого, сервера и клиента, которые будут проверять чтение и запись всокеты соответственно. любое предложение для этого было бы большой помощью
PS.извините, если вопрос слишком "noobie-ish". пожалуйста, будьте спокойны для меня. Это мой первый пост здесь
эта же программа, до этого работала отлично, когда у меня была только одна нить в каждом клиентефайл Cl.java для чтения ввода с сервера и его распечатки, а один на стороне сервера для чтения ввода с клиента и его распечатки.но проблема возникла, когда я создал два потока в каждой из серверной и клиентской программ для чтения и записи строк.
любое предложение будет приветствоваться. Просто хотел создать два отдельных потока на стороне клиента и на стороне сервера для чтенияи пишу.
вот мой полный код для сервера:
Se.java
import java.net.*;
import java.io.*;
public class Se
{
public static int i=0;
public static BufferedReader stdIn =null;
public static void main (String [] args) throws IOException
{
ServerSocket serverSocket = null ;
try {
serverSocket = new ServerSocket (4321);
}
catch (IOException e)
{
System.err.println("Could not listen to the server port.");
System.exit (1);
}
Socket clientSocket= null;
try{
clientSocket= serverSocket.accept();
new Thread(new Sconsole(clientSocket)).start();
new Thread(new Slistener(clientSocket)).start();
}
catch(Exception e)
{
System.err.println("Accept failed");
System.exit(1);
}
stdIn.close();
clientSocket.close();
serverSocket.close();
}
}
/* thread to listen from client and print it at server console */
class Slistener implements Runnable
{
Socket channel=null;
public static PrintWriter out = null;
public static BufferedReader in = null;
public static String inputL=null;
public static boolean closed=true;
public Slistener(Socket Soc)
{
this.channel=Soc;
try
{
in=new BufferedReader(new InputStreamReader(channel.getInputStream()));
//closed=false;
new Thread(new Slistener(channel));
}
catch(IOException e)
{
System.out.println("error in making stream from server to client");
}
}
public void run ()
{
try
{
while((inputL=in.readLine())!= null)
{
System.out.println("SERVER:" + inputL);
if (inputL.equals ("Bye.")) break;
}
}
catch (IOException e)
{
System.out.println("Exception thrown at run loop.");
}
}
}
/* thread to listen from console at server end and print it at client console */
class Sconsole implements Runnable
{
Socket channel=null;
public static PrintWriter out = null;
public static BufferedReader in = null;
public static String inputL=null;
//public static boolean closed=true;
public Sconsole() {}
public Sconsole(Socket Soc)
{
this.channel=Soc;
try
{
out=new PrintWriter(channel.getOutputStream(), true);
in=new BufferedReader(new InputStreamReader(System.in));
//closed=false;
new Thread(new Sconsole(channel));
}
catch(Exception e)
{
System.out.println("error in writing to stream from server to client");
}
}
public void run ()
{
try
{
System.out.println("SERVER:");
while(true)
{
inputL=in.readLine();
out.println(inputL);
if (inputL.equals ("End.")) break;
}
//closed=true;
}
catch (Exception e)
{
System.out.println("Exception thrown at run loop.");
}
}
}
Теперь код клиента:
Cl.java
import java.io.*;
import java.net.*;
public class Cl extends Thread
{
public static Socket channel= null;
public static void main(String args[]) throws IOException
{
try{
channel= new Socket ("localhost", 4321);
System.out.println("client connected");
new Thread(new Clistener(channel)).start();
new Thread(new Cconsole(channel)).start();
}
catch (Exception e)
{
System.err.println("Unknown Exception");
System.exit(1);
}
channel.close();
}
}
/* thread to listen from server and print it at client console */
class Clistener implements Runnable
{
Socket channel=null;
public static PrintWriter out = null;
public static BufferedReader in = null;
public static String inputL=null;
public Clistener() {}
public Clistener(Socket Soc)
{
this.channel=Soc;
try
{
in=new BufferedReader(new InputStreamReader(channel.getInputStream()));
new Thread(new Clistener(channel));
}
catch(IOException e)
{
System.out.println("error in making stream from server to client");
}
}
public void run ()
{
try
{
while(true)
{
inputL=in.readLine();
System.out.println("SERVER:" + inputL);
if (inputL.equals ("Bye.")) break;
}
}
catch (IOException e)
{
System.out.println("Exception thrown at run loop.");
}
}
}
/* thread to listen from client console and print it at server console */
class Cconsole implements Runnable
{
Socket channel=null;
public static PrintWriter out = null;
public static BufferedReader in = null;
public static String inputL=null;
public Cconsole(Socket Soc)
{
this.channel=Soc;
try
{
out=new PrintWriter(channel.getOutputStream(), true);
in=new BufferedReader(new InputStreamReader(System.in));
new Thread(new Cconsole(channel));
}
catch(Exception e)
{
System.out.println("error in making stream from server to client");
}
}
public void run ()
{
try
{
while((inputL=in.readLine())!= null )
{
System.out.println("CLIENT:");
out.println(inputL);
if (inputL.equals ("Bye.")) break;
}
}
catch (Exception e)
{
System.out.println("Exception thrown at run loop.");
}
}
}
что не так с обоими потоками в каждой программе соответственно, так как они зависают ??любые предложения приветствуются:)