zoukankan      html  css  js  c++  java
  • java通信之Socket通信基础

    正处于网络环境下的两个程序,它们之间通过一个交互的连接来实现数据通信。每一个连接的通信端叫做一个Socket。一个完整的Socket通信程序应该包含以下几个步骤:

    ①创建Socket;

    ②打开连接到Socket的输入输出流;

    ④按照一定的协议对Socket进行读写操作;

    ④关闭Socket。

    Socket通信分两部分:服务器端和客户端。服务器端必须优先启动,然后等待socket连接,如果达成连接则开始执行输入输出操作,通过输入流获取客户端的请求信息,通过

    输出流返回客户端信息。客户端则只需创建一个Socket指定服务器的ip和端口号即可。

    下面看服务器代码:

    public class SocketServer {  
        public static int port = 3333;  
        public static String ip = "172.30.1.101";  
          
        public static void main(String[] args) throws IOException {  
            //启动服务器  
            ServerSocket server = new ServerSocket(port);  
            System.out.println("server running...");  
            //监听Socket  
            Socket socket = server.accept();  
            //IO流  
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
            PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));  
              
            String client = null;  
            //如果接收到客户端的exit信号则关闭Socket  
            while(!"exit".equalsIgnoreCase(client = br.readLine())){  
                System.out.println("from client say:"+client);  
                pw.println("server get your info :" +client);  
                pw.flush();  
            }  
                      
            br.close();  
            pw.close();  
              
            socket.close();  
            server.close();  
        }  
    }  

    下面看客户端代码:

    public class SocketClient {
        
        public static void main(String[] args) throws IOException {
            //连接服务器
            Socket socket = new Socket(SocketServer.ip,SocketServer.port);
            System.out.println("client running...");
            
            System.out.println("-----insert your info:");
            //用户在控制台输入向服务器发送的信息
            BufferedReader brConsole = new BufferedReader(new InputStreamReader(System.in));
            //IO流
            PrintWriter pw = new PrintWriter(socket.getOutputStream());
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            
            String server = null;
            //如果用户输入exit则关闭Socket
            while(!"exit".equalsIgnoreCase(server =  brConsole.readLine())){
                pw.println(server);
                pw.flush();
                System.out.println("from server say:"+br.readLine());
            }
            //当用户输入exit时,把exit信息发送给服务器,服务器关闭当前Socket
            pw.println(server);
            pw.flush();
            
            pw.close();
            brConsole.close();
            br.close();
            
            socket.close();
        }
    }

    需要注意的是:

    测试时,首先启动服务器,然后启动客户端即可;

    使用PrintWriter写数据的时候务必使用println,因为对方使用BufferReader的readline来取数据,如果使用print则BufferReader读取不到数据。

    这只是基础实例,不支持并发。

  • 相关阅读:
    2018/08/23 cstring中memset()函数的运用
    HDU 6446 Tree and Permutation(赛后补题)
    51NOD 1154 回文串的划分(DP)
    第七章小结_查找
    列出连通集的邻接表解题
    第六章学习小结_初识图
    图的邻接矩阵和邻接表及深度优先搜索
    第五章学习小结
    深深深深深深入虎穴
    括号匹配_进阶篇 ( 7-2 符号配对 )
  • 原文地址:https://www.cnblogs.com/wale/p/4431454.html
Copyright © 2011-2022 走看看