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 }

 

posted @ 2019-04-18 19:44  ControllerMe  阅读(728)  评论(0编辑  收藏