黑马程序员-网络编程TCP&UDP

本文深入讲解了TCP与UDP两种传输协议的区别与应用场景,包括网络模型的七层介绍、IP地址的作用、端口号的意义以及DNS服务器的工作原理。同时,提供了基于这两种协议的实际编程案例。

------- <a  target="blank">android培训</a>、<a  target="blank">java培训</a>、期待与您交流! --------

package it.heima.mylog;

public class TCPAndUDP {
/*=========================================================
关键字:net包,网络模型-七层简述,IP地址,传输协议TCP,UDP
网络模型
1,物理层
主要定义物理设备标准,他的主要作用是传输比特流。这一层的数据叫做比特。
2,数据链路层
主要将从物理层接收的数据进行MAC地址的封装和解封装,常把这一层的数据叫做帧。
在这一层工作的设备室交换机。数据通过交换机来传输。
3,网络层
主要将从下层接收道德数据进行 IP 地址的封装和解封装。
在这一层工作的设备室路由器。常把这一层的数据叫做数据包。
4,传输层
定义了一些传输数据的协议和端口号。
TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据)。
例如:打电话,下载,等等需要相互连接的。
UDP(用户数据报协议,与TCP相反,用于传输可靠性要求不高,数据量小的数据)。
例如:对讲机,发QQ消息等等不需要相互握手的信息。
5,会话层
通过传输层(端口号:传输端口和接收端口)建立数据传输的通路。主要在系统之间发起会话相应。
6,表示层
主要进行对接收的数据进行解释,加密与解密,压缩与解压缩。
也就是把计算机能过识别的东西转换成人能过识别的东西。
7,应用层
主要是一些终端用用。

7应用层
6表示层
5会话层
4传输层
3网络层
2数据链路层
1物理层

网络通讯要素:IP地址,端口号,传输协议。
IP地址:InetAddress

端口号:用于表示进程的逻辑地址,不同的进程的标识。
有效端口:0-65535      其中0-1024为系统使用或保留。

传输协议:TCP,UDP

重点:
UDP
1,将数据及源和目的封装成数据包中,不需建立连接。
2,每个数据报的大小在限制64k内。
3,因无连接,是不可靠的,但速度快。

TCP
1,建立连接,形成传输数据的通道。
2,在连接通道中进行大量数据的传输。
3,通过三次(1:你在吗? 2:我在。 3:噢,我知道了。)握手完成连接,是可靠协议,但效率会稍低。

DNS服务器
1,任何网络的信息交流都是基于IP去定位的。DNS服务器就是存储着一些网站的主机名和IP,一一对应的。
2,当我们浏览网页时,就只需要输入主机名www.baidu.com,而不需要输入百度主机的IP了。应为IP不容易记。
3,浏览网页时,首先不是向DNS服务器去找相应的IP地址,而是会在本地host文件中查找,没有才会去DNS服务器查找。
所以可以在本地host文件中过滤一些垃圾广告网站。

白天复习内容:
1,用UDP协议模拟一个发送端和一个接收端。
2,将两个端整合成一个聊天程序。
3,熟悉net包方法。

location:本地
TCP:Transmission Control Protocol传输控制协议
UDP:User Datagram Protocol用户数据报协议
=======================================================================*/

/*====================================================================
关键词:UDP传输协议,TCP传输协议,Socket流
 
UDP协议练习

创建UDP发送端   Send 
思路:
1,建立udp的socket服务。
2,将要发送的数据封装到数据包中。
3,通过udp的socket服务将数据包发送出去。
4,关闭socket服务。 
udpsocket服务,使用DatagramSocket对象创建。
DatagramSocket ds = new DatagramSocket(8888);
 
键盘输入用System.in,将字节流转换成字符流,便于操作,修饰加强缓冲区
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
 
定义一个字符串用了存储读取的数据(一行)
String line = nul;
 
疯狂的读取
while((line = bufr.readLine()) != null){
 byte[] buf = line.getBytes();
 DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10000);
 ds.send(dp);
 
 输入886表示退出
 if("886".equals(line))
  break;
}
ds.close();

创建UDP接收端   Receive
 
思路:
1,建立udp socket服务,因为是要接受数据,必须明确一个端口。
2,创建一个接收数据包,用于存储收到的数据。方便数据包对象的方法解析这些数据。
3,使用socket服务的receive方法将接收道德数据存储在数据包中。
4,通过数据包的方法解析数据包的数据。
5,关闭资源。
 
要明确一个端口号
DatagramSocket ds = new DatagramSocket(10000);

疯狂的接收 
while(true){ 
 byte[] buf = new byte[1024];
 DatagramPacket dp = new DatagramPacket(buf,buf.length);
 
 //注意::阻塞式方法
ds.receive(dp);
 通过数据包对象解析其中的数据,比如地址,端口,数据内容等
 String ip = dp.getAddress().getHostAddress();
 int port = dp.getPort();
 String text = new String(dp.getData(),0,dp.length());
 System.out.println(ip+":"+port+":"+text);
}

ds.close();
============================================================= 
TCP协议练习
 
TCP传输,客户端建立过程   Client 
思路
1,客户端发送数据到服务端
2,创建TCP客户端socket服务。使用的是Socket对象,一创建就明确目的地(要连接的主机)。
3,如果连接成功,说明数据传输通道已建立,该通道就是socket流,是底层建立好的
 既然是流,说明这里既有输入又有输出。想要输入或输出流对象,都可以找socket来获取。
4,使用流输出,将数据写出,关闭资源。
 
Socket socket = new Socket("192.168.1.100",10001);
OutputStream out = sock.getOutputStream();
out.write("TCP演示".getBytes);
 
读取服务端返回的数据,使用socket读取流。
InputStream in = sock.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
 
将读取的数据转成字符串显示
String text = new String(buf,0,len);
System.out.println(text);
sock.close();
 
TCP传输,服务端建立过程   Server
 
思路:
1,创建服务端socket服务。通过SreverSocket对象创建。
2,服务端必须对外提供一个端口,否则客户无法连接。
3,获取连接过来的客户对象。
4,通过获取的客户端对象获取sock流读取客户端发来的数据,并显示。
5,关闭资源,关客户端,关服务端。
 
创建服务端对象
ServerSocket ss = new ServerSocket(10001);
 
获取连接过来的客户端对象
Socket s = ss.accept();
 
获取客户端IP
String ip = s.getAddress().getHostAdress();
 
通过socket对象获取输入流,要读取客户端发来的数据。
InputStream in = new s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
 
将读取的数据准成字符串
String text = new String(buf,0,len);
System.out.println(ip+":"+text);
 
使用客服端socket对象的输出流给客户端返回数据
OutputStream out = s.getOutputStream();
out.write("收到".getBytes());
 
关闭服务端客户端资源
s.close();
ss.close();
*/
}

------ <a  target="blank">android培训</a>、<a  target="blank">java培训</a>、期待与您交流! -------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值