Socket初步了解

Posted 雅俗共赏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Socket初步了解相关的知识,希望对你有一定的参考价值。

 

在这之前我们先了解一下一些关于网络编程的概念

  网络编程从大方面说就是对信息的发送和接收,中间传输为物理线路的作用,编程人员可以不用考虑
  网络编程最主要的工作就是在发送端吧信息通过规定好的协议进行组装包,在接收端按照规定好的
  协议进行包装解析,从而提取对应的信息,达到通信的目的
网络编程的三要素
  1.IP地址
    唯一标识网络上的每一台计算机
  构成:32位,由4个8位二进制数组成
  

 

  IP地址=网络地址加主机地址
    网络地址:标识计算机或网络设备所在的网段
    主机地址:标识特定主机或网络设备
  

 

 
  2.端口
  "端口"是英文port的意译,可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集线器等RJ45端口。电话使用RJ11插口也属于物理端口的范畴。
 
 

两类传输协议:TCP   UDP

  TCP就是Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送

  方和接收方的成对的两个socket之间必须建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个

  socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送 或接收操作。

  UDP就是Use  Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的

  路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

什么是Socket
  网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
  建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,
  这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

Socket网络编程可以分为以下步骤

  1.建立连接

  2.打开Socket关联的输出流

  3.数据流读取信息

  4.关闭所有数据流和Socket

Socket实现原理机制

  1.通信两端都有Socket  

  2.网络通信其实就是Socket间的通信

  3.数据在两个Socket间通过IO传输

 Socket 通信模型

  进行网络通信时,Socket需要借助数据流来完成数据流的传递工作

  

如何实现多客户请求呢

 

采用多线程方式

一个专门负责监听的应用服务程序

一个专门负责处理请求的线程程序

DatagramPacket类

  封装了数据报的数据,数据长度,目标地址和目标端口

DatagramSocket类

  接收和发送DatagramPacket对象封装好的数据报

基于UDP协议的Socket网络编程步骤

  1.利用DatagramPacket对象封装数据报

  2.利用DatagramSocket发送数据报

  3.利用DatagramSocket接收数据报

  4.利用DatagramPacket处理数据报

使用两种协议实现简单的对话功能(简单的对话功能)

 

 

 

 

复制代码
ServerSocket sk=new ServerSocket(11111);
        //2.监听
        Socket s=sk.accept();
        //打包数据
        BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));    
        BufferedReader bw=new BufferedReader(new InputStreamReader(System.in));
        OutputStream os=s.getOutputStream();
        String line=null;
        while((line=br.readLine())!=null){
            System.out.println("Client \\t"+line);        
            
            os.write(bw.readLine().getBytes());
        }            
        //释放资源
        s.close();
        //sk.close();
复制代码

 

复制代码
    Socket sk=new Socket("192.168.111.1",11111);
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));
        String line=null;
        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);
            String h=new String(by, 0, num);
            System.out.println("Service:\\t"+h);
        }                    
            //br.close();
            //bw.close();
            sk.close();


    }
复制代码

 实现结果

 

==============================================

 =======================================

 

========================================

以上是关于Socket初步了解的主要内容,如果未能解决你的问题,请参考以下文章

初步了解URL

大白话系列MySQL 学习总结 之 初步了解 MySQL 的架构设计

http协议初探

python 之 socket 的初步认识

ACE的Socket初步

socket网络编程-中级篇