UDP/TCP
Posted tractors
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UDP/TCP相关的知识,希望对你有一定的参考价值。
一、UDP/TCP区别:
(1)连接:建立连接,形成传输数据的通道;
(2)大数据传输:在连接中进行大数据量传输;
(3)可靠:通过三次握手完成连接,是可靠协;
(4)速度慢:必须建立连接,效率会稍低;
2、UDP无连接:
(1)无连接:将数据及源和目的封装成数据包中,不需要建立连接;
(2)小数据传输:每个数据报的大小在限制在64k内;
(3)不可靠:因无连接,所以是不可靠协议;
(4)速度快:不需要建立连接,速度快;
二、UDP/DatagramSocket/DatagramPacket:
1、传输思路:
1)发送:
(1)建立udpsocket服务;
(2)提供数据,并将数据封装到数据包中;
(3)通过socket的send服务的发送功能,将数据包发出去;
(4)关闭资源;
2)接收:
(1)建立udpsocket服务,监听一个端口;
(2)定义数据包,用于存储接收到的字节数据;
(3)通过socket的receive服务的接收功能,存入定义好的数据包中;
(4)通过数据包中的特有功能,取出数据;
(5)关闭资源;
2、DatagramSocket类:用于创建udpsocket服务;
(1)构造方法:
1)DatagramSocket();
2)DatagramSocket(int port);指定一个端口号;
(2)方法:
1)void send(DatagramPacket p);发送数据包;
2)void receive(DatagramPacket p);接收数据包;//此方法在接收到数据报前一直阻塞;
3)void close();关闭资源;
3、DatagramPacket类:用于创建数据包;
(1)构造方法:
1)发送数据包:DatagramPacket(byte[] buf, int length, InetAddress address, int port);
//参数:buf数据;length长度;address地址;port端口;
2)接收数据包:DatagramPacket(byte[] buf, int length);
(2)方法:
1)InetAddress getAddress();返回IP地址;
2)byte[] getData();返回数据包;//创建的为1024时,没有存满则后面为默认值;
3)int getLength();返回接收到的数据长度,不是数组的;
4)int getPort();返回端口号;
4、示例:
1)发送端:
public class Send public static void main(String[] args) throws Exception // 1、建立udpsocket服务 DatagramSocket client = new DatagramSocket(); // 2、提供数据,并将数据封装到数据包中 String msg = "hello"; byte[] data = msg.getBytes(); DatagramPacket packet = new DatagramPacket(data, data.length, new InetSocketAddress("127.0.0.1", 8848)); // 3、发送数据包 client.send(packet); // 4、关闭资源 client.close();
2)接收端:
public class Receive public static void main(String[] args) throws Exception // 1、建立udpsocket服务,监听一个端口; DatagramSocket server = new DatagramSocket(8848); // 2、定义数据包,用于存储接收到的字节数据; byte[] container = new byte[1024]; DatagramPacket packet = new DatagramPacket(container, container.length); // 3、通过socket的receive服务的接收功能,存入定义好的数据包中; server.receive(packet); // 4、数据解析 InetAddress address = packet.getAddress(); byte[] data = packet.getData(); int length = packet.getLength(); int port = packet.getPort(); System.out.println(address); System.out.println(new String(data, 0, length)); System.out.println(length); System.out.println(port); // 5、关闭资源 server.close();
三、TCP/Socket/ServerSocket:
1、传输思路:
1)客户端:
(1)建立socket服务,并指定要连接的主机和端口;
(2)获取流,并且写入数据;
(3)关闭资源;
2)服务端:
(1)建立socket服务,并监听一个端口;//ServerSocket;
(2)获取客服的传过来的对象;accpet方法;
(3)把获取到对象用socket的方法转为流来处理数据;
(4)关闭资源;
2、Socket客户端套接字:
1)构造方法:
(1)Socket(InetAddress address, int port);创建一个插口,连接到指定IP和端口;
(2)Socket(String host, int port);
2)核心方法:
(1)void close();
(2)InputStream getInputStream();返回插口的输入流;
(3)OutputStream getOutputStream();返回插口的输出流;
3、ServerSocket服务器套接字:
1)构造方法:ServerSocket(int port);绑定特定端口服务器套接字;
2)核心方法:
(1)Socket accept();监听连接;//此方法在连接传入之前一直阻塞;
(2)void close();
5、示例:
1)服务端:
public class TcpService public static void main(String[] args) throws Exception // 1、建立socket服务,并监听一个端口;//ServerSocket; ServerSocket serverSocket = new ServerSocket(10086); // 2、获取客服的传过来的对象;accpet方法; Socket socket = serverSocket.accept(); System.out.println(socket.getInetAddress().getHostAddress()); // 3、把获取到对象用socket的方法转为流来处理数据; InputStream in = socket.getInputStream(); byte[] data=new byte[1024]; int len=in.read(data); System.out.println(new String(data,0,len)); // 5、返回数据 OutputStream out=socket.getOutputStream(); out.write("收到,谢谢".getBytes()); // 4、关闭资源; socket.close(); serverSocket.close();
2)客户端:
public class TcpClient public static void main(String[] args) throws Exception // 1、建立socket服务,并指定要连接的主机和端口; Socket socket = new Socket("127.0.0.1", 10086); // 2、获取流,并且写入数据; OutputStream out = socket.getOutputStream(); out.write("服务器你好!".getBytes()); // 3、获取流,读取数据; InputStream in = socket.getInputStream(); byte[] data = new byte[1024]; int len = in.read(data); System.out.println(new String(data, 0, len)); // 4、关闭资源 socket.close();
以上是关于UDP/TCP的主要内容,如果未能解决你的问题,请参考以下文章