UDP和TCP通信机制(实现简单的数据发送与接收)

UDPTCP通信机制

UDP

将数据源和目的封装成数据包中,不需要建立连接;每个数据报的大小在限制在64k;因无连接,是不可靠协议;不需要建立连接,速度快。

 

UDP协议发送和接收数据图解

接收端的代码:

package UDP数据接收与发送;

 

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

 

/*

 * UDP协议接收数据:

 * A:创建接收端Socket对象

 * B:创建一个数据包(接收容器)

 * C:调用Socket对象的接收方法接收数据

 * D:解析数据包,并显示在控制台

 * E:释放资源

 */

public class ReceiveDemo {

public static void main(String[] argsthrows IOException {

// 创建接收端Socket对象

DatagramSocket ds = new DatagramSocket(10086);

// 创建一个数据包(接收容器)

byte[] bys = new byte[1024];

int length = bys.length;

DatagramPacket dp = new DatagramPacket(byslength);

// 调用Socket对象的接收方法接收数据

ds.receive(dp);// 阻塞方法

// 解析数据包,并显示在控制台

InetAddress ia = dp.getAddress();

String ip = ia.getHostAddress();

byte[] bys2 = dp.getData();

int len = dp.getLength();

String s = new String(bys2, 0, len);

System.out.println(ip + "发来数据:" + s);

// 释放资源

ds.close();

}

}

发送端的代码:

package UDP数据接收与发送;

 

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

 

/*

 * UDP协议接收数据:

 * A:创建发送端Socket对象

 * B:创建一个数据包(发送容器)

 * C:调用Socket对象的发送方法接收数据

 * E:释放资源

 */

public class SendDemo {

public static void main(String[] argsthrows IOException {

// 创建发送端Socket对象

DatagramSocket ds = new DatagramSocket();

// 创建一个数据包(发送容器)

byte[] bys = ("hello,DUP,我来了").getBytes();

int length = bys.length;

InetAddress address = InetAddress.getByName("59.71.66.152");

int port = 10086;

DatagramPacket dp = new DatagramPacket(byslengthaddressport);

// 调用Socket对象的发送方法接收数据

ds.send(dp);

// 释放资源

// ds.close();

}

}

 

TCP

建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低

 

TCP协议发送和接收数据图解

服务器端代码:

package TCP数据发送与接收;

 

import java.io.IOException;

import java.io.InputStream;

import java.net.ServerSocket;

import java.net.Socket;

 

public class ServerDemo {

public static void main(String[] argsthrows IOException {

// 创建接收端的套接字对象

ServerSocket ss = new ServerSocket(8888);

// 监听客户端连接,返回相应的Socket对象

Socket s = ss.accept();

// 获取输入流对象,从输入流中获取数据

InputStream is = s.getInputStream();

byte[] bys = new byte[1024];

int len = is.read(bys);

String str = new String(bys, 0, len);

System.out.println("From Client" + "(" + s.getInetAddress().getHostAddress() + "):" + str);

// 释放资源

s.close();

}

}

客户端代码:

package TCP数据发送与接收;

 

import java.io.IOException;

import java.io.OutputStream;

import java.net.Socket;

 

public class ClientDemo {

public static void main(String[] argsthrows IOException {

// 创建Socket套接字对象

Socket s = new Socket("59.71.66.152", 8888);

// 获取输出流对象,写数据

OutputStream os = s.getOutputStream();

os.write("hello,世界".getBytes());

// 释放资源

s.close();

}

}

 


你可能感兴趣的:(Java)