简体   繁体   English

Java Client Server 聊天程序

[英]Java Client Server chatting program

I got a code from the internet for a Client and Server to communicate in java.我从互联网上得到了一个用于客户端和服务器在 java 中进行通信的代码。 I modified it a bit, so that the server and client are able to chat to each other.我稍微修改了一下,以便服务器和客户端能够相互聊天。

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.为此,在 while 循环中放置了一个基本代码,以便对话以 1 对 1 的方式进行。但是当我放置 while 循环时,客户端不会收到来自服务器的消息。 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 循环(我已在此处的代码中注释),则首先消息由客户端发送到服务器,然后服务器发送到客户端,程序停止。

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM