码迷,mamicode.com
首页 > 其他好文 > 详细

网络编程

时间:2017-10-17 15:24:51      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:out   网卡   通信   压缩   示例   回话   七层   system   sde   

1 网络模型

  • OSI:开放系统互连参考模型
  • TCP/IP参考协议

 

2 网络通讯要素

  • IP地址
    • 网络中设备的标识
    • 不易记忆,可用主机名代替127.0.0.1  
  • 端口号
    • 用于标识进程的逻辑地址,不同进程的标识  
  • 传输协议
    • 通讯的协议
    • TCP、UDP  

 

3 OSI参考模型与TCP/IP模型

技术分享

 

4 OSI七层简述

  • ①物理层:主要用来定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是1和0转换为电流强弱来进行传输,到达目的地后再转换为1和0,也就是我们通常说的数模转换与模数转换)。这一层的数据叫做比特。
  • ②数据链路层:主要将从物理层接收的数据进行MAC地址(网卡的地址)的封装和解封装。常常把这一层的数据叫做帧。在这一层工作的设备是交换机,数据通过交换机来传输。
  • ③网络层:主要将从下层接收到的数据进行IP地址的封装和解封装。在这一层工作的设备是路由器,通常把这一层的数据叫做数据包。
  • ④传输层:定义了一些传输数据的协议和端口号,如TP、UDP。主要是从下层接收的数据进行分段和传输,到达目的地址后再进行重组。通常把这一层的数据叫做段。
  • ⑤回话层:通过传输层建立数据传输的通路。主要在你的系统之家发起回话或者接收回话请求。
  • ⑥表示层:主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等。
  • ⑦应用层:主要是一些终端的应用。如FTP、WEB、QQ之类的。

 

5 UDP和TCP

  • UDP
    • 将数据源和目的封装成数据包中,不需要建立连接
    • 每个数据包的大小限制在64K内
    • 因为没有连接,所以是不可靠的协议
    • 不需要建立连接,速度快
  • TCP
    • 建立连接,形成传输数据的通道
    • 在连接中进行大数据量的传输
    • 通过三次握手完成连接,是可靠连接
    • 必须建立连接,效率会稍低    

 

6 InetAddress

6.1 InetAddress概述

  • 表示互联网协议的IP地址

 

6.2 常用方法

  • 根据指定的主机名,获取系统上配置的名称服务返回其IP地址锁组成的数组
public static InetAddress[] getAllByName(String host) throws UnknownHostException
  • 根据指定的主机名获取主机的IP地址
public static InetAddress getByName(String host) throws UnknownHostException
  • 返回IP地址的字符串
public String getHostAddress()
  • 返回IP地址的主机名
public String getHostName()

 

6.3 示例

  • 示例:
package java21;

import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * 2017/10/16
 * 说明:
 */
public class InetAddressDemo {
    public static void main(String[] args) throws UnknownHostException {
        InetAddress ip = InetAddress.getByName("www.baidu.com");

        System.out.print(ip.getHostName() +"\n"+ip.getHostAddress());

    }
}

技术分享

7 Socket

  • Socket就是为网络服务提供的一种机制。
  • 通信的两端都有Socket。
  • 网络通信其实就是Socket之间的通信。
  • 数据在两个Socket之间进行IO传输。

 

8 UDP

8.1 DatagramSocket

8.1.1 DatagramSocket概述

  • 此类表示用来发送和接收数据包的套接字

 

8.1.2 构造方法

  • 创建数据包的套接字对象,将其绑定到指定的端口
public DatagramSocket(int port) throws SocketException

 

8.1.3 方法

  • 从此套接字发送数据包
public void send(DatagramPacket p) throws IOException
  • 从此套接字获取数据包
public void receive(DatagramPacket p) throws IOException

 

8.2 DatagramPacket

8.2.1 DatagranPackage概述

  • 此类表示数据包,数据包是用来实现无连接包投递服务。

 

8.2.2 构造方法

  • 构造数据包,用来将长度为length的包发送到指定主机上的指定端口号
public DatagramPacket(byte[] buf, int length, InetAddress address,int port)
  • 构造数据包,用来接收长度为length长度的数据包
public DatagramPacket(byte[] buf,  int length)

 

8.2.3 方法

  • 返回某台机器的IP地址,此数据包将要发往该机器或者从该机器接收到
public InetAddress getAddress()
  • 返回数据缓冲区
public byte[] getData()
  • 返回将要发送或接收到的数据的长度
public int getLength()

 

8.3 示例

8.3.1 发送端

  • 示例:
package java20;

import java.io.IOException;
import java.net.*;

/**
 * 2017/10/17
 * 说明:
 */
public class UDPSendDemo {
    public static void main(String[] args) throws IOException {
        DatagramSocket ds = new DatagramSocket();


        String str = "hello";

        DatagramPacket dp = new DatagramPacket(str.getBytes(),str.length(), InetAddress.getByName("127.0.0.1"),12345);


        ds.send(dp);

        ds.close();



    }
}

 

8.3.2 接收端

  • 示例:
package java20;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/**
 * 2017/10/17
 * 说明:
 */
public class UDPReceiveDemo {

    public static void main(String[] args) throws IOException {
        DatagramSocket ds = new DatagramSocket(12345);

        byte[] buffer = new byte[1024];
        DatagramPacket dp = new DatagramPacket(buffer,buffer.length);

        ds.receive(dp);

        String ip = dp.getAddress().getHostAddress();
        String str = new String(dp.getData(),0,dp.getLength());
        int port = dp.getPort();

        System.out.println("ip地址:"+ip);
        System.out.println("接收的内容:"+str);
        System.out.println("端口号:"+port);

        ds.close();



    }
}

 

网络编程

标签:out   网卡   通信   压缩   示例   回话   七层   system   sde   

原文地址:http://www.cnblogs.com/xuweiweiwoaini/p/7674661.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!