Java Client Server 聊天程序

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/22719106/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 17:28:57  来源:igfitidea点击:

Java Client Server chatting program

javasockets

提问by Adit Kabra

I got a code from the internet for a Client and Server to communicate in java. I modified it a bit, so that the server and client are able to chat to each other.

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

Initially my client sends a message to server, then server to client, then client to server and it goes on...(one cannot send more than one message continuously to the other). For this there is a basic code put in the while loop so that the conversation goes on 1 to 1. But as i put the while loop, the message from server is not received by client. If there is no while loop(which i have commented in the code here), then first the message is sent by client to server and then server to client and the program stops.

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

Please help me in making the chat go endlessly.

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

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

回答by Don Chakkappan

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

回答by r.m.Vivek Arni

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

回答by shivshankar

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