zoukankan      html  css  js  c++  java
  • 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.
             */
    
        }
  • 相关阅读:
    标准函数头部注释
    排序
    #define _INTSIZEOF(n)
    并发编程资料
    memory model
    Ubuntu搜狗输入法的使用
    gprof
    xml_editor
    创建本地Ubuntu镜像
    设计模式9:建造者模式
  • 原文地址:https://www.cnblogs.com/liehuonanjue/p/8686824.html
Copyright © 2011-2022 走看看