A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王文辉 中级黑马   /  2015-7-2 13:07  /  450 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


socket是网络驱动层提供给应用程序编程接口和一种机制
所谓socket通常也称作"套接字",用于描述IP地址和端口,
        是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
       
        .getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例
        .getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例
       
        由于socket是应用层协议无关的,所以创建连接时只需提供主机地址和端口号即可(localhost,9999)
        只要知道某个应用层协议的格式,就可用socket手动实现此格式,手动解析接收到的数据,以模拟此协议的客户端
        socket 普遍应用于应用程序的数据通信。可以直接创建socket客户端,用来连接已存在的
        各种应用层协议的服务器(web服务器,邮件服务器),也可以创建自己的socketServer服务器
       
        对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:
        (1) 创建Socket;
  (2) 打开连接到Socket的输入/出流;
  (3) 按照一定的协议对Socket进行读/写操作;
  (4) 关闭Socket.
       

API:
        服务器端:SocketServer 和 Socket
        SocketServer server = new SocketServer(9999); //在本机上创建一个socket服务器,端口是9999
        Socket socket = server.accept()//接受客户端发来的socket连接,此方法是阻塞式的,会一直等待客户端的连接请求

        //in 和 out 是socket通信的核心,可以使用各种包装类包装他们。
        //in 的read方法是阻塞式的,应用时需要注意。       
        InputStream in = socket.getInputStream();
        OutputStream out = socket.getOutputStream();

        BufferedInputStream
        BufferedOutputStream

        BufferedWriter writer = new BufferedWriert(new OutputStreamWriter(socket.getOutputStream(),"utf-8"));
        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(),"utf-8"));

        PrintWriter writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(),"utf-8"));


        客户端:Socket
        Socket socket = new Socket("localhost",9999);//根据主机地址和端口号以TCP/IP协议形式 发送连接请求并建立连接
       
        InputStream in = socket.getInputStream();
        OutputStream out = socket.getOutputStream();
        ...

模拟Http协议
        Socket socket = new Socket("www.baidu.com",80);
       
        PrintWriter writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(),"utf-8"));
        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(),"utf-8"));

        writer.println("GET /index.html HTTP/1.1");
        writer.println("Host:www.baidu.com:80");
        writer.flush();

        String line = "";
        while((line = reader.readLine())!=null){
                System.out.println(line);
        }


网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯
网络编程的核心是IP、端口、协议三大元素
网络编程的本质是进程间通信
网络编程的两个主要问题:
        一个是如何准确的定位网络上一台或多台主机
        另一个就是找到主机后如何可靠高效的进行数据传输
目前较为流行的网络编程模型是客户机/服务器(C/S)结构

传输协议:TCP、UDP
        TCP是一种面向连接的保证可靠传输的协议,通过TCP协议传输,得到的是一个顺序的无差错的数据流
                经过“三次握手”确保连接的可靠性
        UDP是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络
                上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是
                不能被保证的

1 个回复

倒序浏览
不错,给力
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马