美文网首页
socket通信,tcp示例

socket通信,tcp示例

作者: 屎倒淋头还嚼便 | 来源:发表于2020-07-01 14:14 被阅读0次
/**
* 基于TCP协议的Socket通信,实现用户登录 服务端
*/
public class TcpServer{    
    public static void main(String[] args) {
        try {
            // 1.创建一个服务器端的 Socket,即 ServerSocket,指定绑定的端,并监听           
            ServerSocket server = new ServerSocket(8888);
            // 2.调用 accept 方法开始监听,等待客户端连接            
            System.out.println("****服务器开始启动,等待客户端上线****");
            Socket socket = server.accept();
            // 3.获取一个输入流,用来读取客户端所发送的登录信息            
            InputStream is = socket.getInputStream();// 字节输入流            
            InputStreamReader isr = new InputStreamReader(is);// 将字节流转为            
            BufferedReader br = new BufferedReader(isr);// 为输入流添加缓冲            
            String info = null;
            while ((info = br.readLine()) != null) {
                System.out.println("我是服务器,客户端说" + info);
            }
            socket.shutdownInput();// 关闭输入流            // 4.获取输出流           
            OutputStream os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os);// 包装打印流            
            pw.write("好的,我收到消息了,你可以出去玩了");
            pw.flush();
            socket.shutdownOutput();
            // 5.关闭资源            
            pw.close();
            br.close();
            isr.close();
            is.close();
            server.close();
        } catch (IOException e) {

        }finally {
            
        }
        
    }

}
/*

* 客户端

* */
public class TcpClient{    
    public static void main(String[] args) {
        try {
            // 1.创建 socket 指定服务器地址和端            
            Socket client = new Socket("localhost", 8888);
            // 2.客户端向服务器发送登录信息            
            OutputStream os = client.getOutputStream();// 字节输出流           
            PrintWriter pw = new PrintWriter(os);
            pw.write("用户名: admin;密码:123");
            pw.flush();
            client.shutdownOutput();// 关闭输出流            // 3. 获取输入流           
            InputStream is = client.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String info = null;
            while ((info = br.readLine()) != null) {
                System.out.println("服务器发来消息说:" + info);
            }
            // 3.关闭其他资源            
            pw.close();
            os.close();
            client.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();

        } catch (IOException e) {
            e.printStackTrace();

        }

    }

}

spring项目启动的同时,开启一个socket服务端

/**
* 基于TCP协议的Socket通信,实现用户登录 服务端
*/
@Component
public class TcpServer{
    
    static {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    ServerSocket server = new ServerSocket(8765);
                    System.out.println("=========tcp启动了=========");
                    while(true) { // 死循环持续监听
                        // 当前线程进入阻塞(等待处理连接请求),该线程和后面处理往来数据的线程是同一个线程。
                        // 如果该线程正在处理数据,而此时又来了新的socketClient连接请求,并且仍由该线程处理,
                        // 那么此时,请求会进入等待,直到该线程处理完前面的数据。
                        Socket socket = server.accept();
                        InputStream is = socket.getInputStream();// 字节输入流            
                        InputStreamReader isr = new InputStreamReader(is);// 将字节流转为            
                        BufferedReader br = new BufferedReader(isr);// 为输入流添加缓冲    
                        StringBuilder sb = new StringBuilder();
                        String info = null;
                        while ((info = br.readLine()) != null) {
                            System.out.println("我是服务器,客户端说" + info);
                            sb.append(info);
                        }
                        socket.shutdownInput();// 关闭输入流 
                        OutputStream os = socket.getOutputStream(); // 4.获取输出流   
                        PrintWriter pw = new PrintWriter(os); // 包装打印流       
                        // 
                        if("chazhuang.txt".equals(sb.toString())) {
                            // 获取插桩文件
                            String gen = System.getProperty("user.dir");
                            BufferedReader reader = new BufferedReader(new FileReader(new File(gen+"/chazhuang.txt")));
                            String tempStr = null;
                            while ((tempStr = reader.readLine()) != null) {
                                pw.write(tempStr+"\n");
                                pw.flush();
                            }
                            reader.close();
                        }
                        socket.shutdownOutput();
                        // 5.关闭资源            
                        pw.close();
                        br.close();
                        isr.close();
                        is.close();
                        //server.close();
                }
            } catch (IOException e) {

            }finally {
                
            }
            }
        }).start();
            
    }

相关文章

网友评论

      本文标题:socket通信,tcp示例

      本文链接:https://www.haomeiwen.com/subject/aywcqktx.html