Java客户端服务器聊天程序

时间:2014-03-28 17:07:35

标签: java sockets

我从互联网上获得了一个客户端和服务器用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();
            }
        }
    }
}

3 个答案:

答案 0 :(得分:2)

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();
 }
 }

答案 1 :(得分:0)

    //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){
    		 
    	 }
     }
     
}

答案 2 :(得分:-1)

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);
        }
    }
}