OSI协议与UDP操作

 

计算机网络中的七层协议:
  OSI是一个开放性的通行系统互连参考模型,他是一个定义的非常好的协议规范。OSI模型有7层结构,每层都可以有几个子层。

7层及其功能:
  OSI的7层从上到下分别是 
  7 应用层 
  6 表示层 
  5 会话层 
  4 传输层 
  3 网络层 
  2 数据链路层 

   1 物理层 
  其中高层,既7、6、5、4层定义了应用程序的功能,下面3层,既3、2、1层主要面向通过网络的端到端的数据流。下面我给大家介绍一下这7层的功能: 
  (1)应用层:与其他计算机进行通讯的一个应用,它是对应应用程序的通信服务的。例如,一个没有通信功能的子处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层。但是,如果添加了一个传输文件的选项,那么字处理器的程序员就需要实现OSI的第7层。示例:telnet,HTTP,FTP,WWW,NFS,SMTP等。 
  (2)表示层:这一层的主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASCII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择ASCII格式,发送方将把文本从发送方的字符集转换成标准的ASCII后发送数据。在接收方将标准的ASCII转换成接收方计算机的字符集。示例:加密,ASCII等。 
  (3)会话层:他定义了如何开始、控制和结束一个会话,包括对多个双向小时的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。示例:RPC,SQL等。 
  (4)传输层:这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。示例:TCP,UDP,SPX。 
  (5)网络层:这层对端到端的包传输进行定义,他定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。示例:IP,IPX等。 
  (6)数据链路层:他定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关。示例:ATM,FDDI等。 
  (7)物理层:OSI的物理层规范是有关传输介质的特性标准,这些规范通常也参考了其他组织制定的标准。连接头、针、针的使用、电流、电流、编码及光调制等都属于各种物理层规范中的内容。物理层常用多个规范完成对所有细节的定义。示例:Rj45,802.3等。 

java UDP 操作 

 1    DatagramSocket 类 
       要收发DatagramPacket必须打开一个数据报socket ,当服务器构造DatagramSocket时。

1.1 服务器和客户端的服务器 

      两者使用的socket都是一样的,区别仅仅在于 服务器端的端口是已知端口,而客户端的端口是系统分配的。

     TCP端口和UDP端口之间没有关联,所以两者可以共同绑定在同一个端口上,而不会有相互影响。

1.2 DatagramSocket 类的构造函数   

      DatagramSocket创建一个在指定端口监听的入站数据报的 socket  ,使用此构造函数可以编写出在指导的端口监听的服务器。

      如果服务器在匿名端口监听,客户端就无法与之联系。

     DatagramSocket 中的receive 方法,是阻塞方法,只有当接收到数据的时候,才会进行下面的代码,否则只会阻塞当前的进程。

1.3 一个简单的UDP 客户端 

      客户端接收用户在控制台上的输入,然后调用 DatagramSocket 中的send方法, 将数据传递出去。

import java.io.*;

import java.net*;

public class UDPDiscardClient extends Thread {

public final static int DEFAULT_PORT = 3000;

public UDPDiscardClient() {

start();

}

public void run() {

String hostname = "localhost";

int port = DEFAULT_PORT;

try {

InetAddress server = InetAddress.getByName(hostname);

BufferedReader userInput = new BufferedReader(

new InputStreamReader(System.in));

DatagramSocket theSocket = new DatagramSocket();

while (true) {

String theLine = userInput.readLine();

if (theLine.equals("."))

break;

byte[] data = theLine.getBytes("UTF-8");

DatagramPacket theOutput = new DatagramPacket(data,

data.length, server, port);

theSocket.send(theOutput);

}

} catch (UnknownHostException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SocketException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}}

public static void main(String[] args) {

new UDPDiscardClient();

}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值