聊天软件原理之Socket网络编程循环收发消息-----聊天软件

#全新智己L6全国试驾开启#

package com.alatus.ourApp.test;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer {
    public static void main(String[] args) {
        try {
//            首先我们建立了服务用于接收所有访问我这个IP这个端口的请求
            ServerSocket ss = new ServerSocket(8868);
            System.out.println("服务已启动,等待客户端连接");
//            任何请求进来都是一个Socket
            Socket accept = ss.accept();
            String ip = accept.getInetAddress().getHostAddress();
            System.out.println("有客户端连接了"+ip+"端口"+accept.getPort());
            new Thread(new Runnable() {
                @Override
                public void run() {
                    while (true){
                        try{
//            我们这边要做流式连接
//            我可以通过这个Socket获取输入流
                            InputStream inputStream = accept.getInputStream();
                            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
//            输入流信息是不能直接获取的,需要通过BufferedReader装载
                            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//            接下来从我们包装过的BufferedReader中读取信息
                            String readLine = bufferedReader.readLine();
                            System.out.println("客户端的消息:"+readLine);
                        }
                        catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
package com.alatus.ourApp.test;

import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class SocketClient {
    public static void main(String[] args) {
        try {
//            只要我们知道对方的ip和端口号,就可以直接连接上对方
            Socket socket = new Socket("127.0.0.1",8868);
//            我们需要发送消息,就需要这个虚拟连接的输出流
            OutputStream out = socket.getOutputStream();
//            输出流封装,使用PrintWriter来输出,我们需要输入流,写入这个输出流内
            PrintWriter printWriter = new PrintWriter(out);
            System.out.println("请输入内容");
            Scanner scanner = new Scanner(System.in);
            new Thread(()->{
                while(true){
                    String input = scanner.nextLine();
//            输入流就直接把客户端输入的东西写进去这个输出流,对方就会收到
                    printWriter.println(input);
//            关闭这个输出流
                    printWriter.flush();
                }
            }).start();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}
原文链接:,转发请注明来源!