UDP协议&TCP协议

域名:

DN (Domain name)是由一串由点分隔的名字组成的Internet上某一台计算机或计算机组的名称。

域名服务系统:DNS:它可以作为将域名和IP地址相互映射的一个分布式数据库。

协议:

应用层常见协议:

  http协议:超文本传输语言。

  ftp协议:文件传输协议

  smtp协议:简单邮件传输协议

 传输层的协议:

  UDP协议:用户数据报协议,面向无连接的,简单不可靠的传输层协议。

  1.   面向无连接
  2. 通过数据报包来进行传输,每个数据报包大小不会超过64k.
  3. 不可靠的传输。
  4. 传输速度快。

  TCP协议:传输控制协议,一种面向连接的,可靠的,基于字节流的传输层通信协议。

  TCP协议传输过程:

  要经过三次握手,确定通道的连接。

  建立流的传输通道,进行数据的传输。

  TCP传输协议的特点:

  1.   面向连接的
  2. 通过流通道进行数据的传输
  3. 可靠的连接
  4. 速度慢

UDP协议传输

代码示例:

发送端:

 1 /**
 2
 3 1. 发送数据报包
 4 ①  创建发送端的套接字对象。
 5 ②  打包数据,用的 DatagramPacket
 6 DatagramPacket(byte[] buf, int length, InetAddress address, int port)
 7 ③  发送
 8 send(dp)
 9 ④  关闭资源
10 close
11 */
12 public class  发送端 {
13 public static void main(String[] args) throws IOException, UnknownHostException {
14 // ①  创建发送端的套接字对象。
15 DatagramSocket ds=new DatagramSocket();
16 String s=" 接收端您好 ";
17 byte[] buf=s.getBytes();
18 DatagramPacket dp=new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(), 9000);
19 // 发送
20 ds.send(dp);
21 // 等待接收端的响应 --> 接收端
22 // 空的数据报包接收
23 byte[] buf1=new byte[1024];
24 DatagramPacket dp1=new DatagramPacket(buf1, buf1.length);
25 ds.receive(dp1);
26 // 显示
27 System.out.println(new String(dp1.getData()));
28 ds.close();
29 }
30 }

接收端:

 1 /**
 2 . 用来接收数据报包
 3 ①  创建一个接收数据的套接字。
 4 ②  创建一个空的数据报包来接收数据
 5 ③  接收 receive(DatagramPacket p)
 6 ④  关闭
 7 */
 8 public class  接收端 {
 9 public static void main(String[] args) throws IOException {
10 // ①  创建一个接收数据的套接字。
11 DatagramSocket ds=new DatagramSocket(9000);
12 // ②  创建一个空的数据报包来接收数据
13 // DatagramPacket(byte[] buf, int length)
14 byte[] buf=new byte[1024];
15 DatagramPacket dp=new DatagramPacket(buf, buf.length);
16 // 接收
17 ds.receive(dp);
18 // 显示 getLength  返回接收到的数据的字节长度
19 System.out.println(new String(buf,0,dp.getLength()));
20 // 发送端响应 -- 》发送端
21 //getAddress/getPort  获取发送端的 ip 地址与端口号
22 DatagramPacket p=new DatagramPacket(" 发送端您好 ".getBytes(), " 发送端您好 ".getBytes().length, d
23 p.getAddress(), dp.getPort());
24 ds.send(p);
25 // 关闭
26 ds.close();
27 }
28 }

TCP协议传输

代码示例:

服务器端代码:

 1 package DemoEE;
 2
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.net.ServerSocket;
 6 import java.net.Socket;
 7
 8 public class 服务器端3 {
 9
10     public static void main(String[] args) throws IOException {
11         System.out.println("正在等待客户端连接");
12         ServerSocket ss=new ServerSocket(9004);
13         Socket s=ss.accept();
14         InputStream is=s.getInputStream();
15         byte[] bt=new byte[1024];
16         int count=0;
17         while((count=is.read(bt))!=-1) {
18             System.out.println(new String(bt,0,count));
19         }
20     }
21 }

客户端代码:

 1 package DemoEE;
 2
 3 import java.io.IOException;
 4 import java.io.OutputStream;
 5 import java.net.InetAddress;
 6 import java.net.Socket;
 7
 8 public class 客户端3 {
 9
10     public static void main(String[] args) throws IOException, IOException {
11         Socket s=new Socket(InetAddress.getByName("localhost"),9004);
12         OutputStream os=s.getOutputStream();
13         os.write(new String("服务器端你好").getBytes());
14         os.close();
15         s.close();
16
17     }
18 }

先执行服务器端,执行效果:

执行客户端,执行效果:

代码示例二:

服务器端:

 1 /**
 2
 3 1. 创建服务器端的对象: 在指定端口监听是否有客户端进行连接。
 4 2. 通过 accept 方法进行监听,并通过三次握手建立连接流通道。
 5 3. 从客户端读取内容,获取流通道中的输入流
 6 4. 关闭资源
 7 */
 8 public class  服务器端 {
 9 public static void main(String[] args) throws IOException {
10 // 1. 创建服务器端的对象: 在指定端口监听是否有客户端进行连接。
11 ServerSocket ss=new ServerSocket(9000);
12 //2. 通过 accept 方法进行监听,并通过三次握手建立连接流通道。
13 // 返回值为当前要连接的客户端对象
14 System.out.println(" 等待客户端的连接。。。。 ");
15 Socket s=ss.accept();
16 //3. 从客户端读取内容,获取流通道中的输入流
17 InputStream is = s.getInputStream();
18 // 读取
19 byte[] b=new byte[1024];
20 int count=0;
21 while((count=is.read(b))!=-1) {
22 System.out.println(new String(b,0,count));
23 }
24 // 关闭资源
25 is.close();
26 ss.close();
27 }
28 }

客户端:

 1 /**
 2
 3 1. 创建客户端的对象: 指定服务器,服务器的端口
 4 2. 向服务器端写入,获取流通道中的输出流
 5 3. 关闭资源
 6 */
 7 public class  客户端 {
 8 public static void main(String[] args) throws IOException {
 9 // 1. 创建客户端的对象: 指定服务器,服务器的端口
10 Socket s=new Socket(InetAddress.getByName("localhost"), 9000);
11 // 2. 向服务器端写入,获取流通道中的输出流
12 OutputStream os = s.getOutputStream();
13 os.write(" 服务器端您好 ".getBytes());
14 // 关闭资源
15 os.close();
16 s.close();
17 }
18 }

代码示例三:

进阶班客户端:

 1 package com.tcp2;
 2 import java.io.BufferedReader;
 3 import java.io.BufferedWriter;
 4 import java.io.InputStreamReader;
 5 import java.io.OutputStream;
 6 import java.io.OutputStreamWriter;
 7 import java.net.InetAddress;
 8 import java.net.Socket;
 9 /**
10
11 1. 客户端
12 */
13 public class  客户端 {
14 public static void main(String[] args) {
15 // 客户端对象
16 try(Socket client=new Socket(InetAddress.getByName("localhost"), 9000);
17 // 用户输入
18 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
19 // 向服务器端发送信息,输出流
20 BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
21 // 读取从服务器写入的内容 输入流
22 BufferedReader bre=new BufferedReader(new InputStreamReader(client.getInputStream()));
23 ){
24 System.out.println(" 客户端要发送到服务器端的内容为: ");
25 // 通过用户输入信息
26 String msg = br.readLine();
27 // 将用户输入的信息发送到服务器端
28 bw.write(msg);
29 // 换行的标识
30 bw.newLine();
31 // 刷新缓冲区
32 bw.flush();
33 // 等待接收
34 String msgServer = bre.readLine();
35 System.out.println(" 从服务器获取的信息: "+msgServer);
36 }catch (Exception e) {
37 e.printStackTrace();
38 }
39 }
40 }

进阶版服务器端:

 1 package com.tcp2;
 2 import java.io.BufferedReader;
 3 import java.io.BufferedWriter;
 4 import java.io.InputStreamReader;
 5 import java.io.OutputStreamWriter;
 6 import java.net.ServerSocket;
 7 import java.net.Socket;
 8 /**
 9
10 1. 服务器端
11 */
12 public class  服务器端 {
13 public static void main(String[] args) {
14 // 服务器
15 try(ServerSocket ss=new ServerSocket(9000);){
16 System.out.println(" 等待客户端的连接。。。。。 ");
17 // 连接每一个客户端
18 try(Socket client=ss.accept();
19 // 读取客户端发送的信息
20 BufferedReader br=new BufferedReader(new InputStreamReader(client.getInputStream()));
21 // 获取服务器端用户输入的信息
22 BufferedReader bin=new BufferedReader(new InputStreamReader(System.in));
23 //  向客户端写入信息
24 BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
25 ){
26 // 读取客户端发来的信息
27 String clientMsg = br.readLine();
28 System.out.println(" 从客户端发来的消息为: "+clientMsg);
29 System.out.println(" 服务器端要发送到客户端的内容为: ");
30 // 服务器端用户输入信息
31 String input = bin.readLine();
32 // 向客户端写入
33 bw.write(input);
34 bw.newLine();
35 bw.flush();
36 }catch (Exception e) {
37 e.printStackTrace();
38 }
39 }catch (Exception e) {
40 e.printStackTrace();
41 }
42 }
43 }

原文地址:https://www.cnblogs.com/ywzbky/p/10731808.html

时间: 2024-11-08 12:23:10

UDP协议&TCP协议的相关文章

网络协议(UDP与TCP协议总结)

一.知识储备: 1.网络通讯三要素: IP地址:InetAddress 网络中设备的标识 不易记忆,可用主机名 本地回环地址:127.0.0.1  主机名:localhost 端口号 用于标识进程的逻辑地址,不同进程的标识 有效端口:0~65535,其中0~1024系统使用或保留端口. 备注:不是所谓的物理端口! 传输协议 通讯的规则 常见协议:TCP,UDP 2.UDP与TCP协议的特点: UDP: 1.将数据源和目的地封装到数据包中,不需要建立连接 2.每个数据包的大小限制在64k以内 3.

可靠的传输层协议——TCP协议

TCP协议 TCP协议工作在传输层,虽然它与UDP的下一层都是IP但是它却和UDP的效果完全不同,它是一种可靠的传输层协议 一.TCP协议封装 TCP数据段头部共有20个字节,包括16位的源端口号,16位的目的端口号,端口号与前面各层中的协议类型相似,都指的是上层将要交给谁,这个端口号就是主机上一个进程所绑定的一个入口,所以通过端口号和IP就能找到唯一主机的唯一进程. 32位序号:用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节.如果将字节流看作在两个应用

通信协议之HTTP,UDP,TCP协议

1.UDP,TCP,HTTP之间的关系 tcp/ip是个协议组,它可以分为4个层次,即网路接口层,网络层,传输层,以及应用层, 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输层有TCP,UDP协议 而在应用层有HTTP,FTP,DNS等协议 因此HTTP本身就是一个协议,是从WEB服务器端传输超文本,到本地浏览器的一个传输协议 2.Socked协议 是为实现以上各个协议而建立的一个通信管道,实际上就是代表了客户端与服务器端的一个通信进程,双方都是通过指定的s

HTTP协议 TCP协议简要

HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议. HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等). HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1.0

数据通讯与网络 第五版第24章 传输层协议-TCP协议部分要点

上一博客记录了UDP协议的关键要点,这部分记录TCP协议的关键要点. 24.3 传输控制协议(TRANSMISSION CONTROL PROTOCOL) TCP(Transmission Control Procotol )协议是一个面向连接,可靠的协议.TCP为了提供面向连接的服务,专门定义了连接创建,数据传输.连接终止阶段.TCP使用GBN和SR协议来提供可靠性.为了实现可靠性这个目标,TCP使用检验和来进行误差控制.重传来处理数据包丢失和冲突.同时还利用了应答和计数机制.在本节,首先讨论

Http与协议TCP协议简单易懂

于C#编写代码,很多时候会遇到Http协议或TCP合约,这里做一个简单的了解. TCP对应于该传送层协议,和HTTP对应于应用层协议,从本质上讲,两者是没有可比性.Http该协议是基于TCP之上的,当浏览器须要从server获取网页数据的时候,会发出一次Http请求. Http会通过TCP建立起一个到server的连接通道.当本次请求须要的数据完成后,Http会马上将TCP连接断开,这个过程是非常短的.所以Http连接是一种短连接.是一种无状态的连接.所谓的无状态,是指浏览器每次向server发

rtp、udp、tcp协议

OSI七层模型: 应用层:文件传输,电邮,文件服务等.HTTP,Telnet,DNS, FTP等协议 表示层:数据格式化,代码转换,数据加密等 会话层:解除或建立与别的接点的联系 传输层:提供端到端的接口   TCP UDP  RTP 网络层:为数据包选择路由    IP ICMP RIP 数据链路层:传输有地址的帧以及错误检测功能 物理层:以二进制数据形式在物理媒体上传输数据 TCP/IP五层协议 应用层: 传输层: 网络层: 数据链路层: 物理层: RTP协议详解: RTP协议层次: 下图是

TCP/IP协议--TCP协议

TCP提供一种面向连接的.可靠的字节流服务.面向连接指,发送和接收方在交换数据前必须建立一个TCP连接.顺便说下,一个TCP连接只有两方,因此广播和多播是不能应用于TCP的.字节流指,两个应用程序通过TCP连接交换8bit字节构成的字节流.可靠性:1. 应用数据被分割成TCP认为最适合发送的数据块.TCP传给IP的叫报文段,也叫段segment2. 当TCP发出一个段后,启动一个定时器,等待目的端确认收到.如果不能及时收到,发送端将重发这个报文段.3. 接收端收到TCP数据,将发送一个确认.并非

TCP、UDP、IP 协议分析

本文转载自:http://blog.chinaunix.net/uid-26833883-id-3627644.html草根老师博客 互连网早期的时候,主机间的互连使用的是NCP协议.这种协议本身有很多缺陷,如:不能互连不同的主机,不能互连不同的操作系统,没有纠错功能.为了改善这种缺点,大牛弄出了TCP/IP协议.现在几乎所有的操作系统都实现了TCP/IP协议栈. TCP/IP协议栈主要分为四层:应用层.传输层.网络层.数据链路层,每层都有相应的协议,如下图 所谓的协议就是双方进行数据传输的一种