我总结了TCP和UDP的要点,希望能个大家学习提供方便
---------------------------------------------------------------潇洒的分割线----------------------------------------------------------------
UDP传输特点
UDP 是无连接的,即发送数据之前不需要建立连接 UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制 UDP 是面向报文的.UDP 没有拥塞控制,很适合多媒体通信的要求 UDP 支持一对一、一对多、多对一和多对多的交互通信 UDP 的首部开销小,只有 8 个字节 ---------------------------------------------------------------潇洒的分割线---------------------------------------------------------------- 发送端(客户端): - package UDPStudy;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- import java.net.SocketException;
- public class UDPSendDemo {
- /**
- * @param args
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- /*
- * 创建UDP传输的发送端
- * 1.建立Socket服务
- * 2.将要发送的数据分装到数据包中
- * 3.通过UDP的Socket服务,将数据发送出去
- * 4.关闭Socket服务
- */
- System.out.println("客户端启动");
- //1.建立UDP服务,使用DatagramSocket
- DatagramSocket ds = new DatagramSocket();
-
- //2.将要发送的数据封装到数据包中
- String str = "我是黑马";
- //使用DatagramPack 将数据打包到文件中
- byte [] buf = str.getBytes();
- //其中new DatagramPacket(数组, 长度,地址,端口号);
- DatagramPacket dp = new DatagramPacket(buf, buf.length,InetAddress.getByName("127.168.1.1"),10000);
-
- //3.发送数据,通过UDP中国的send方法,将数据发送出去
- ds.send(dp);
-
- //4.关闭资源
- ds.close();
- System.out.println("客户端关闭");
- }
- }
复制代码 ---------------------------------------------------------------潇洒的分割线----------------------------------------------------------------
服务端- package UDPStudy;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- public class UDPResiveDemo {
- /**
- * @param args
- */
- public static void main(String[] args) throws Exception {
- /*
- * 建立UDP接收端的思路
- * 1.建立UDPSocket 其中一定要明确数据的端口
- * 2.创建数据包来接受数据,同时方便解析数据
- * 3.通过SOcket方法中的 receive方法接收,写入到数据包中
- * 4.通过对数据的分析
- * 5.关闭资源
- */
-
- System.out.println("接收端启动");
-
- //1.建立UDP SOcker 系统服务,其中一定要传入端口号
- DatagramSocket ds = new DatagramSocket(10000);
-
- //2.建立数据包
- byte [] buf = new byte [1024] ;
- DatagramPacket dp = new DatagramPacket(buf, buf.length);
- //3.通过Socket中的receive方法将数据写入
- ds.receive(dp);//这个方法是闭塞式的,所以一定要注意
-
- //获取客户端的Ip
- String ip = dp.getAddress().getHostAddress();//获取IP
- int port = dp.getPort();//获取端口
-
-
-
- //4.解析数据,其中一定要重点的注意数据的解析的是datagrampacket
- String str = new String(dp.getData(),0,dp.getLength());
- //将端口数据打印
- System.out.println(ip+port);
- //打印数据
- System.out.println(str);
-
- //5.关闭资源
- ds.close();
-
- }
- }
复制代码 TCP传输特点:
(1)面向连接的传输; (传输数据之前,使用TCP进行通信的双方,必须通过建立逻辑链接)
(2)端到端的通信; (端口到端口的通信,端口是用来标志应用程序的)
(3)高可靠性,确保传输数据的正确性,不出现丢失或乱序;
(TCP对数据封装称报文段, 并做了编号,IP协议会出现乱序,IP协议只是尽最大可能将数据发送出去。TCP会对乱序数据进行重新排序,在提交给应用层的协议)
(4)全双工方式传输;
(5)采用字节流方式,即以字节为单位传输字节序列;
(6)紧急数据传送功能。
---------------------------------------------------------------潇洒的分割线----------------------------------------------------------------
发送端:- package TCPStudy;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.net.Socket;
- import java.net.UnknownHostException;
- public class TCPSend {
- /**
- * @param args
- * @throws IOException
- * @throws UnknownHostException
- */
- public static void main(String[] args) throws UnknownHostException, IOException {
- /*
- * 建立TCP的客户端
- * 1.创建TCP的Socket服务,和UDP不同的是使用的Socket对象,建立的时候就明确了主机
- * 2.如果建立连接成功,说明创术通道建立
- * 该通道时Socket流,是地城建立好的连接,既然是流,有流的输入和输出
- * 3.使用输出流,将数据写出
- * 4.关闭资源
- */
-
- System.out.println("客户端启动");
-
- //1.建立Socket服务
- Socket socket = new Socket("127.168.1.1", 10000);
-
- //2.获取输出流
- OutputStream out = socket.getOutputStream();
-
- //3.数据写出,其中的数据必须是字节流,可以通过getByte() 方法获取字节
- out.write("我是黑马".getBytes());
-
- //4.关闭资源
- socket.close();
-
- System.out.println("客户端关闭");
- }
- }
复制代码 接收端:- package TCPStudy;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.ServerSocket;
- import java.net.Socket;
- public class TCPReceive {
- /**
- * @param args
- * @throws IOException
- */
- public static void main(String[] args) throws IOException {
- /*
- * 建立TCP服务端的思路
- * 1.建立TCP的Socket服务,通过ServerSocket服务
- * 2.服务端需要提供端口
- * 3.获取客户端对象
- * 4.通过客户端对象获取socket流读取数据
- * 5.关闭资源
- */
- System.out.println("服务端启动");
-
- //1.通过ServerSocket,建立SOcket服务
- ServerSocket server = new ServerSocket(10000);
-
- //2.获取Socket,其中通过的是ServeiceSocket中的accept方法,这个必须记住
- Socket socker = server.accept();
-
- //获取Ip
- String ip = socker.getInetAddress().getHostName();
-
- //3.获取输入流
- InputStream in = socker.getInputStream();
-
- //4.处理数据
- byte buf [] = new byte [1024];
- int len = in.read(buf);//其中读取的是字符的长度
-
- String str = new String(buf,0,len);
- System.out.println(str);
-
- System.out.println("\n客户端IP:"+ip);
- //关闭资源
- server.close();
- in.close();
- }
- }
复制代码 |