zoukankan      html  css  js  c++  java
  • 服务器和客户端Socket单向通信例子

    看了两天socket通信,也参考了网上其他人是怎么写的。

    下面我把最简单的socket例程贴出来

    server代码:

    public class Server {
    
        private static int port = 8888;  
        private static ServerSocket serverSocket;  
        private static Socket socket;
        
        public static void main(String args[]) throws IOException {  
    
            serverSocket = new ServerSocket(port, 2);  
            socket = serverSocket.accept();  
            System.out.println("客户端已链接");  
              
            DataInputStream dis = new DataInputStream(socket.getInputStream()); 
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
            dos.writeUTF("来自服务器的消息");
            
            while (true){  
                /*
                //读取客户端发送的信息
                String str = dis.readUTF();
                System.out.println("From 客户端:"+str);
                
                if(str.equals("bye")){  
                    socket.close();  
                    serverSocket.close();  
                    break;  
                }  
                */
                // 发送键盘输入的一行    
                 String s = new BufferedReader(new InputStreamReader(System.in)).readLine(); 
                 dos.writeUTF(s);
            }   
        }  
    }

    Client代码:

    public class Client {
    
        private static int port = 8888;  
        private static String host = "localhost";  
        private static Socket socket;  
        
        public static void main(String args[]) throws UnknownHostException,  
                IOException {  
            socket = new Socket(host, port);  
            
            DataInputStream dis = new DataInputStream(socket.getInputStream()); 
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
            dos.writeUTF("来自客户端的消息");
            
            while(true){  
                //读取服务器发送的信息
                String str = dis.readUTF();
                System.out.println("From 服务器:"+str);
                
                if(str.equals("bye")){  
                    socket.close();  
                    System.out.println("关闭socket");  
                    break;  
                } 
                // 发送键盘输入的一行    
                //String s = new BufferedReader(new InputStreamReader(System.in)).readLine(); 
                //dos.writeUTF(s);
            }     
        } 
    }
    因为readLine()是一个阻塞函数,接收不到消息会阻塞在那里。如果把两个文件中的注释去掉后,服务器和客户端必须你一句我一句,才能正常通信。目前还没有解决办法。
    所以,先实现单向通信:server发送数据,client接收数据。
  • 相关阅读:
    leetcode刷题笔记303题 区域和检索
    leetcode刷题笔记301题 删除无效的括号
    20201208日报
    20201118日报
    20201117日报
    20201116日报
    20201115日报
    20201114日报
    20201113日报
    20201112日报
  • 原文地址:https://www.cnblogs.com/liushao/p/6378778.html
Copyright © 2011-2022 走看看