黑马程序员——高新技术---Java基础-网络编程

-----------android培训java培训、java学习型技术博客、期待与您交流!------------ 


网络参考模型:

OSI参考模型                          TCP/IP协议

应用层                                         应用层

表示层                                         传输层

会话层                                          网际层

传输层                                         主机至网络层

网络层                                   

数据链路层

物理层

网络模型7层概述:

1.物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由10转化为电流强弱来进行传输,到达目的地后在转化为10,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。

2. 数据链路层:主要将从物理层接收的数据进行MAC地址(网卡的地址)的封装与解封装。常把这一层的数据叫做帧。在这一层工作的设备是交换机,数据通过交换机来传输。

3. 网络层:主要将从下层接收到的数据进行IP地址(例192.168.0.1)的封装与解封装。在这一层工作的设备是路由器,常把这一层的数据叫做数据包。

4. 传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。

5.会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)

6.表示层:主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等(也就是把计算机能够识别的东西转换成人能够能识别的东西(如图片、声音等)。

7.应用层: 主要是一些终端的应用,比如说FTP(各种文件下载),WEBIE浏览),QQ之类的(可以把它理解成我们在电脑屏幕上可以看到的东西.就是终端应用)。

 

网络编程的三要素:IP地址,端口号,协议

 

InetAddress:此类表示互联网(IP)协议

InetAddress staticgetByName(String hostName)

主机名:getHostName()

主机IP地址:getHostAddress();

 

端口:

物理端口:网卡口

逻辑端口:由操作系统定义并维护,Windows下逻辑端口范围:0--65535

我们讲的端口就是"逻辑端口"

每个网络应用程序都至少占用1个逻辑端口,也可以同时占用多个

每个端口,同一时刻只能被一个应用占用

有效端口:0-65535,其中0--1024系统使用或保留端口

 

协议:

网络传输协议:UDP,TCP,HTTP,FTP……

UDP

1),先将数据打包

2),不需要链接,可以没有接收方,发送方直接发送即可。

3),由于不需要建立连接,不安全的,速度快。

4),发送的数据大小有限制:64k

类似于:广播、电视

 

TCP

1),面向连接的,必须要有接收方。形成传输数据的通道。

2),安全,速度慢--连接时,需要双方发送握手信息。(三次握手)

类似于:打电话

 

UDP传输:

UDP协议发送数据:

 1,创建发送端Socket对象  DatagramSocket

 2,创建数据,并将数据打包Datagrampacket  DatagramPacket(byte[] buf, int length, InetAddress address, intport)// 构造数据报包,用来将长度为length 的包发送到指定主机上的指定端口号。(目标IP,目标端口,信息内容,信息长度)

3,调用Socket对象的发送方法发送数据: send()方法

 4,释放资源

 

UDP协议接收数据:

 1,创建接收端Socket对象:DatagramSocket(监听端口)

2, 创建数据报,接收发送端的内容。

 3,调用Socket对象的接收方法接收数据。receive()方法

4,解析数据,显示在控制台:通过DategramPacket对象获取信息

 

TCP传输:面向连接的,一定要有接收方存在

TCP协议发送数据:

1,创建TCP客户端的Socket对象       构造方法:Socket(Stringhost,int fort);

2,获取输出流,写数据  

3,释放资源

 

TCP协议接收数据

创建TCP服务器端的Socket对象   ServerSocket(监听端口)

监听客户端连接   accept()方法会返回一个Socket对象

获取输入流,读取数据

释放资源

 

 

具体编程思路:

UDP协议编程:

1.发送端:

1.实例化DatagramSocket();

DatagramSocketsocket = new DatagramSocket();

2.准备数据:

IP:        InetAddressadd = InetAddress("Lenovo-PC");

端口:        int port = 8888;

数据:        byte[] byteArray ="你好".getBytes();

3.准备数据报:

DatagramPacketpacket = new DatagramPacket(byteArray,

byteArray.length,

add,port);

4.发送:

socket.send(packet);

5.释放资源:

socket.close();

2.接收端:

//1.实例化DatagramSocket

DatagramSocketsocket = new DatagramSocket(8888);

//2.准备一个空的byte[]数组

byte[]byteArray = new byte[1024];

//3.准备一个空的DatagramPacket

DatagramPacketpacket = new DatagramPacket(byteArray,byteArray.length);

//4.等待信息

socket.receive(packet);

//5.获取信息

byte[]infoArray = packet.getData();

Stringinfo = new String(infoArray,0,packet.getLength());

System.out.println("获取的信息:" + info);

//6.释放资源

socket.close();

 

 

.TCP协议编程:

1.发送端:

//1.实例化一个Socket

Socketsocket = new Socket("192.168.38.91",8888);

//2.获取输出流

OutputStreamout = socket.getOutputStream();

//3.输出,一次输出一个字节数组

out.write("你好".getBytes());

//4.释放资源

out.close();

socket.close();

2.接收端:

//1.实例化一个ServerSocket

ServerSocketserver = new ServerSocket(8888);

//2.获取输入流

InputStreamin = socket.getInputStream();

//3.一次读取一个字节数组

byte[]byteArray = new byte[1024];

intlen = in.read(byteArray);

Strings = new String(byteArray,0,len);

System.out.println("接收到的数据:" + s);

//4.释放资源

in.close();

sever.close();

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值