用java实现聊天程序

代码的服务端和客户端都是本机,以下是服务端程序代码:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import java.util.concurrent.*;

public class SocketReceiver {  //服务端
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ServerSocket serverSocket = null;
        try {
            serverSocket  = new ServerSocket(52189);
            while (true) {
                Socket socket = serverSocket.accept();
                ExecutorService executor= Executors.newSingleThreadExecutor();
                Future<String> future=executor.submit(new ReceiveHandler(socket));
                String result=future.get();
                if (result.equals("客户端: quit"))
                {
                    socket.close();
                    break;
                }
                else {
                    socket.close();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (serverSocket != null)
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }
}
class ReceiveHandler implements Callable<String> {
    private Socket socket=null;
    public ReceiveHandler(Socket socket) {
        this.socket = socket;
    }
    public String call() {
        String str=null;
        try {
            InputStream in = socket.getInputStream();
            int count = 0;
            while (count == 0) {
                count = in.available();
            }
            byte[] b = new byte[count];
            in.read(b);
            str = new String(b);
            System.out.println(str);
            if (str.equals("客户端: quit"))
            {
                System.out.println("客户端已离线!");
            }
            else {
                OutputStream outer = socket.getOutputStream();
                Scanner input = new Scanner(System.in);
                String message = input.nextLine();
                message = "服务端: " + message;
                byte[] b_out = message.getBytes();
                outer.write(b_out);
                outer.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return str;
    }
}

以下是客户端代码:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

public class SocketSender {    //客户端
    public static void main(String[] args) {
        Socket socket = null;
        try {
            InetAddress ip=InetAddress.getByName("localhost");
            while (true) {
                socket = new Socket(ip, 52189);
                OutputStream outer = socket.getOutputStream();
                Scanner in = new Scanner(System.in);
                String message = in.nextLine();
                String messages = new String("客户端: " + message);
                byte[] b = messages.getBytes();
                outer.write(b);
                outer.flush();
                if (message.equals("quit"))
                {
                    socket.close();
                    System.out.println("服务端已离线!");
                    break;
                }
                else {
                InputStream inner = socket.getInputStream();
                int count = 0;
                while (count == 0) {
                    count = inner.available();
                }
                byte[] recv = new byte[count];
                inner.read(recv);
                String str_recv = new String(recv);
                System.out.println(str_recv);
                socket.close();
                }
            }
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行结果如图所示:
客户端终端:
在这里插入图片描述
服务端终端:
在这里插入图片描述

发布了81 篇原创文章 · 获赞 22 · 访问量 7704

猜你喜欢

转载自blog.csdn.net/qq_38883271/article/details/103464066
今日推荐