Java客户端服务器聊天程序

我从互联网上获得了一个代码,用于客户端和服务器在java中进行通信。 我稍微修改了一下,以便服务器和客户端能够相互聊天。

最初我的客户端向服务器发送消息,然后服务器发送到客户端,然后客户端发送到服务器并且它继续…(一个不能连续向另一个发送多个消息)。 为此,在while循环中放置了一个基本代码,以便对话继续进行1到1.但是当我放入while循环时,客户端不会收到来自服务器的消息。 如果没有while循环(我在这里的代码中已注释),则首先将消息由客户端发送到服务器,然后服务器发送到客户端,程序停止。

请帮助我让聊天无休止地进行。

//SERVER import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class Server { private static Socket socket; public static void main(String[] args) { try { int port = 25000; ServerSocket serverSocket = new ServerSocket(port); socket = serverSocket.accept(); System.out.println("Server Started and listening to the port 25000"); //while(true){ //Server is running always. This is done using this while(true) loop //Reading the message from the client InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String number = br.readLine(); System.out.println("Received from client: "+number+"\n"); BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in)); String s = bufferRead.readLine(); //Sending the response back to the client. OutputStream os = socket.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(os); BufferedWriter bw = new BufferedWriter(osw); bw.write(s); bw.flush(); System.out.println("Sent (to " + socket + ") client: "+s+"\n"); //String abc = bufferRead.readLine(); //System.out.println("SAA"); //} } catch (Exception e) { e.printStackTrace(); } finally { try { socket.close(); } catch(Exception e){} } } } //CLIENT import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.InetAddress; import java.net.Socket; public class Client { private static Socket socket; public static void main(String args[]) { try { String host = "localhost"; int port = 25000; InetAddress address = InetAddress.getByName(host); socket = new Socket(address, port); //while(true){ //Send the message to the server OutputStream os = socket.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(os); BufferedWriter bw = new BufferedWriter(osw); BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in)); String s = bufferRead.readLine(); String sendMessage = s + "\n"; bw.write(sendMessage); bw.flush(); System.out.println("Sent to server: " +sendMessage+"\n"); //Get the return message from the server InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); System.out.println(socket); String message = br.readLine(); System.out.println("Received from server: "+message+"\n"); //} } catch (Exception exception) { exception.printStackTrace(); } finally { //Closing the socket try { socket.close(); } catch(Exception e) { e.printStackTrace(); } } } } 

 Server.java import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.*; public class Server implements Runnable { ServerSocket serversocket; BufferedReader br1, br2; PrintWriter pr1; Socket socket; Thread t1, t2; String in="",out=""; public Server() { try { t1 = new Thread(this); t2 = new Thread(this); serversocket = new ServerSocket(5000); System.out.println("Server is waiting. . . . "); socket = serversocket.accept(); System.out.println("Client connected with Ip " + socket.getInetAddress().getHostAddress()); t1.start();; t2.start(); } catch (Exception e) { } } public void run() { try { if (Thread.currentThread() == t1) { do { br1 = new BufferedReader(new InputStreamReader(System.in)); pr1 = new PrintWriter(socket.getOutputStream(), true); in = br1.readLine(); pr1.println(in); } while (!in.equals("END")); } else { do { br2 = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = br2.readLine(); System.out.println("Client says : : : " + out); } while (!out.equals("END")); } } catch (Exception e) { } } public static void main(String[] args) { new Server(); } } Client.java import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.*; public class Client implements Runnable { BufferedReader br1, br2; PrintWriter pr1; Socket socket; Thread t1, t2; String in = "", out = ""; public Client() { try { t1 = new Thread(this); t2 = new Thread(this); socket = new Socket("localhost", 5000); t1.start();; t2.start(); } catch (Exception e) { } } public void run() { try { if (Thread.currentThread() == t2) { do { br1 = new BufferedReader(new InputStreamReader(System.in)); pr1 = new PrintWriter(socket.getOutputStream(), true); in = br1.readLine(); pr1.println(in); } while (!in.equals("END")); } else { do { br2 = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = br2.readLine(); System.out.println("Server says : : : " + out); } while (!out.equals("END")); } } catch (Exception e) { } } public static void main(String[] args) { new Client(); } } 

首先,您必须将此代码保存在计算机的C驱动器中,然后打开两个命令提示符窗口。 然后你必须在客户端窗口中编写“javac clients.java”,在服务器窗口中编写“javac server.java”,按下enter按钮后写入“java clients”和“java server”并享受聊天。

  //server.java import java.io.*; import java.net.*; public class server { public static void main(String []V){ try{ ServerSocket ss = new ServerSocket(1201); Socket s = ss.accept(); DataInputStream Din = new DataInputStream(s.getInputStream()); DataOutputStream Dout = new DataOutputStream(s.getOutputStream()); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String MsgIn="",MsgOut=""; while(!MsgIn.equals("end")){ MsgIn = Din.readUTF(); System.out.println(MsgIn); MsgOut = br.readLine(); Dout.writeUTF(MsgOut); Dout.flush(); } s.close(); }catch(Exception e){ } } } //clients.java import java.io.*; import java.net.*; import javax.xml.crypto.Data; public class clients { public static void main(String []S){ try{ Socket s = new Socket("192.168.0.103",1201);//my pc's ip //Socket s = new Socket("192.168.0.100",1201); DataInputStream Din = new DataInputStream(s.getInputStream()); DataOutputStream Dout = new DataOutputStream(s.getOutputStream()); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String MsgIn="",MsgOut=""; while(!MsgIn.equals("end")){ MsgOut = br.readLine(); Dout.writeUTF(MsgOut); MsgIn = Din.readUTF(); System.out.println(MsgIn); } }catch(Exception e){ } } } 
  //server.java import java.io.*; import java.net.*; public class server { public static void main(String []V){ try{ ServerSocket ss = new ServerSocket(1201); Socket s = ss.accept(); DataInputStream Din = new DataInputStream(s.getInputStream()); DataOutputStream Dout = new DataOutputStream(s.getOutputStream()); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String MsgIn="",MsgOut=""; while(!MsgIn.equals("end")){ MsgIn = Din.readUTF(); System.out.println(MsgIn); MsgOut = br.readLine(); Dout.writeUTF(MsgOut); Dout.flush(); } s.close(); }catch(Exception e){ } } } //clients.java import java.io.*; import java.net.*; import javax.xml.crypto.Data; public class clients { public static void main(String []S){ try{ Socket s = new Socket("192.168.0.103",1201);//my pc's ip //Socket s = new Socket("192.168.0.100",1201); DataInputStream Din = new DataInputStream(s.getInputStream()); DataOutputStream Dout = new DataOutputStream(s.getOutputStream()); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String MsgIn="",MsgOut=""; while(!MsgIn.equals("end")){ MsgOut = br.readLine(); Dout.writeUTF(MsgOut); MsgIn = Din.readUTF(); System.out.println(MsgIn); } }catch(Exception e){ } } } 
 import java.io.*; import java.net.*; class serversvi1 { public static void main(String svi[])throws IOException { try { ServerSocket servsock=new ServerSocket(5510); DataInputStream dis=new DataInputStream(System.in); System.out.println("enter the file name"); String fil=dis.readLine(); System.out.println(fil+" :is file transfer"); File myfile=new File(fil); while(true) { Socket sock=servsock.accept(); byte[] mybytearray=new byte[(int)myfile.length()]; BufferedInputStream bis=new BufferedInputStream(new FileInputStream(myfile)); bis.read(mybytearray,0,mybytearray.length); OutputStream os=sock.getOutputStream(); os.write(mybytearray,0,mybytearray.length); os.flush(); sock.close(); } } catch(Exception saranvi) { System.out.print(saranvi); } } } import java.io.*; import java.net.*; class clientsvi1 { public static void main(String svi[])throws IOException { try { Socket sock=new Socket("localhost",5510); byte[] bytearray=new byte[1024]; InputStream is=sock.getInputStream(); DataInputStream dis=new DataInputStream(System.in); System.out.println("enter the file name"); String fil=dis.readLine(); FileOutputStream fos=new FileOutputStream(fil); BufferedOutputStream bos=new BufferedOutputStream(fos); int bytesread=is.read(bytearray,0,bytearray.length); bos.write(bytearray,0,bytesread); System.out.println("out.txt file is received"); bos.close(); sock.close(); } catch(Exception SVI) { System.out.print(SVI); } } }