socket 简单了解

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
 
建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
 
所以需要
服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
 
搭建客户端 单方向
//客户端
public class Client {

    public static void main(String[] args) throws Exception {
        // 要连接的ip和端口,并监听ip和端口 两个端口需一样
        Socket sk = new Socket("192.168.60.1", 49154);
        // 建立连接后获得输入流
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));
        String line;
        // 循环给line添加值
        while ((line = br.readLine()) != null) {
            bw.write(line);
            bw.newLine();
            bw.flush();
            InputStream is = sk.getInputStream();
            byte[] by = new byte[1024];
            int num = is.read(by);
            // by一口气传输多少字节 0 num 等于有多少字节
            String h = new String(by, 0, num);
        }
        br.close();
        bw.close();
        sk.close();

    }
//服务端
public class Server {
    public static void main(String[] args) throws Exception {
        // 监听指定的端口 端口号最好从49152到65535之间
        ServerSocket sk = new ServerSocket(49154);
        // sk将一直等待连接的到来
        Socket s = sk.accept();
        // 建立好连接后,从Socket中获取输入流,并建立缓冲区进行读取
        BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
        BufferedReader bw = new BufferedReader(new InputStreamReader(System.in));
        // line 等于客户端添加的内容 如果不添加会一直在 Socket s = sk.accept()等待到来
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println("服务端 	" + line);
        }
        // 释放资源
        s.close();
        sk.close();

        /*
         * BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null,
         * 但如果client的socket末经关闭就销毁, 则会产生IO异常.
         * 正常的方法就是使用socket.close()关闭不需要的socket.
         */

    }
原文地址:https://www.cnblogs.com/liehuonanjue/p/8686824.html