socket实现一个简单的echo服务

举报
INGUCoder 发表于 2019/04/24 10:51:11 2019/04/24
【摘要】 服务端的实现: public class EchoServer{ //创建一个serverSocket private final ServerSocket serverSocket; //创建一个构造器 传入端口 public EchoServer(int port) throws IOException{ ...
服务端的实现:
    public class EchoServer{
        //创建一个serverSocket
        private final ServerSocket serverSocket;
        //创建一个构造器 传入端口
        public EchoServer(int port) throws IOException{
             //创建服务端    这里相当于创建了一个服务器并开启了通信端口port
            serverSocket = new ServerSocket(port);
            
        }
        //开始等待并接受客户端连接
        public void run() throws IOException(){
             //等待客户端的信息   如果客户端长时间没有与它建立连接  将会抛出异常 异常是在jdk中封装了的
             Socket  client = serverSocket.accept();
             //进行socket通信处理
             handleClient(client);
        
        
        }
        //进行socket通信
        private void handleClient(Socket socket) throws IOException(){
        
        
            //获取输入流
            InputStream in = socket.getInputStream();
            //输出流
            OutPutStream out = socket.getOutputStream();
            //设置缓冲区  1024个字节
            byte[] buffer = new byte[1024];
            //输出流的长度
            int n;
            //不断读入来自客户端的数据流  然后写回给客户端
            while((n=in.read(buffer))>0){
            
                out.write(buffer,0,n);
               
            
            }
            
        
        
        }
    
    
    public static void main(String[] args){
    
        try{
            //开启客户端 设置端口为9000
            EchoServer server = new EchoServer(9000);
            //运行服务端
            server.run();
        
        }catch(IOException e){
            e.printStackTrace();
        }
    
    }
    
    }
    
 客户端的实现:
     public class EchoClient{
         //创建socket
         private final Socket socket;
         
         //和服务端进行通信
         
         pubic void run throws IOException(){
             //创建一个线程和服务端进行通信
             Thread readThread = new Thread(this::readResponse);
             //使用了lambda表达式相当于
             /*
                Thread  readThread = new Thead(new Runnable(){
                
                    @Override
                    public void run(){
                        
                        readResponse();
                    
                    }
                
                });*/
                
                
                 //开启线程
                readThread.start();
                //设置输出流
                outputStream in = socket.getOutputStream();
                //创建缓冲区
                byte[] byte = new Byte[1024];
                //设置流的长度
                int n;
                //不断读取来自于服务端的流信息  并不断显示在客户端屏幕上
                while((n=System.read(buffer))>0){
                    out.write(buffer,0,n);
                }
             
         }
         
         
         
         public void readResonse(){
             
             try{
                 //创建输入流对象
                 InputStram in = socket.getInputStream();
                 
                 //创建缓冲区
                 byte[] buffer = new byte[1024];
                 //设置流的长度
                 int n;
                 //读取流 并不断向服务端写入数据
                 while((n=in.read(buffer))>0){
                 
                     System.out.write(buffer,0,n);
                     
                 
                 }
                  
             
             }catch(IOException e){
             
                 e.printStackTrace();
             }
         
         
             
         }
     
     
     public static void main(String[] args){
     
         try{
             EchoClient client = new EchoClient("localhost",9000);
             client.run();
             
         
         }catch(IOException e){
         
             e.printStackTrace();
         }
         
     }
     
     }

运行程序时 先打开服务端  否则就会报java.net.ConnectException: Connection refused: connect   连接被拒绝  因为没有服务器  所以无法连接

运行结果

微信截图_20190424103858.png


github地址:https://github.com/INGUCoder/learning/tree/master/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。