zoukankan      html  css  js  c++  java
  • 基于多线程的TCP socket通信经典案例

    服务器端

    package com.thinkvenus.study.socket;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.Socket;
    
    /**
     * 服务器端线程处理类
     */
    public class ThreadServer extends Thread {
        
        private Socket socket;
        
        public ThreadServer(Socket socket) {
            this.socket = socket;
        }
        
        /**
         * 线程执行的操作,响应客户端请求
         */
        @Override
        public void run() {
            InputStream is = null;
            InputStreamReader isr = null;
            BufferedReader br = null;
            OutputStream os = null;
            PrintWriter pw = null;
            
            try {
                is = socket.getInputStream();
                isr = new InputStreamReader(is);
                br = new BufferedReader(isr);
                String msg;
                while((msg = br.readLine()) != null) {
                    System.out.println("这里是服务器端,客户端说:" + msg);
                }
                socket.shutdownInput();//关闭输入
                
                //获取输出流,响应客户端的请求
                os = socket.getOutputStream();
                pw = new PrintWriter(os);
                pw.write("欢迎您");
                pw.flush();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                
                //关闭资源
                try {
                    if(pw != null) pw.close();
                    if(os != null) os.close();
                    if(br != null) br.close();
                    if(isr != null) isr.close();
                    if(is != null) is.close();
                    if(socket != null) socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                
            }
        }
        
    }
    package com.thinkvenus.study.socket;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /**
     * 基于TCP的socket通信
     */
    
    public class Server {
        
        public static void main(String[] args) {
            try {
                ServerSocket serverSocket = new ServerSocket(8888);
                System.out.println("*****************服务端即将启动,等待客户端的连接**********");
                int count = 0;
                //循环监听客户端的连接
                while(true) {
                    Socket socket = serverSocket.accept();//开始监听
                    ThreadServer ts = new ThreadServer(socket);
                    ts.start();
                    count++;
                    System.out.println("客户端的数量:"+count);
                }
                
            } catch (IOException e) {
                e.printStackTrace();
            }
            
        }
        
    }

    客户端:

    package com.thinkvenus.study.socket;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    public class Client {
        
        public static void main(String[] args) {
            try {
                Socket socket = new Socket("localhost", 8888);
                OutputStream os = socket.getOutputStream();
                PrintWriter pw = new PrintWriter(os);//将输出流包装为打印流
                pw.println("username=aaron; pwd="+Math.random());
                pw.flush();
                
                socket.shutdownOutput();//关闭输出
                //获取输入流,获取服务器端的响应
                InputStream is = socket.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                String msg;
                while((msg = br.readLine()) != null) {
                    System.out.println("我是客户端,服务端说:"+ msg);
                }
                
                //关闭资源
                br.close();
                isr.close();
                is.close();
                pw.close();
                os.close();
                socket.close();
                
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
    }
  • 相关阅读:
    工作的思考十七:工作中容易犯的错误
    学习之路三十四:再一次重构缓存设计
    学习之路三十五:Android和WCF通信
    学习之路二十:两周工作技术总结
    学习之路三十三:重构技巧的学习
    工作的思考十五:升职前需要做的准备(TeamLeader)
    学习之路三十二:VS调试的简单技巧
    maven pom
    maven环境配置
    maven的背景
  • 原文地址:https://www.cnblogs.com/ThinkVenus/p/6771595.html
Copyright © 2011-2022 走看看