天天看点

java网络编程使用UDP和TCP协议进行通信的流程UDP通信程序TCP通信程序

java网络编程

  • UDP通信程序
    • UDP发送数据流程
    • UDP接收数据流程
  • TCP通信程序
    • TCP发送数据
    • TCP接收数据

UDP通信程序

UDP发送数据流程

//1.  创建发送端的Socket对象(DatagramSocket)
//DatagramSocket()构造数据报套接字并将其绑定到本地主机上的任何可用端口
DatagramSocket  ds = new DatagramSocket()

//2.  创建数据,并把数据打包
//DataframPacket(byte[] buf, int length, InetAddress address, int port)
//构造一个数据包,发送长度为length的数据包到指定主机上的指定端口号
byte[] bys = "hello, udp, 我来了".getBytes();
int length = bys.length;
InetAddress address = InetAddress.getByName("172.19.10.8");
int port = 10086;
DatagramPacket dp = new DatagramPacket(bys, length, address, port);

//3.  调用DatagramSocket对象的方法发送数据
// void send(DatagramPacket p)从此套接字发送数据包
ds.send(dp)

//4.  关闭发送端
ds.close();
           

UDP接收数据流程

//1.创建接收端的Socket对象(DatagramSocket)
//DatagramSocket(int port)构造数据报套接字并将其绑定到本地主机上的指定端口
DatagramSocket ds = new DatagramSocket(1234);

//2.创建一个数据包,用于接收数据
//DatagramPacket(byte[] buf, int length)构造一个DatagramPacket用于接收长度为length数据包
byte[] bys = new byte[1024];
DatagramPacket dp = new DatagramPacket(bys, bys.length);

//3.调用DatagramSocket对象的方法接收数据
ds.receive(dp);

//4.解析数据包,并把数据在控制台显示
//byte[] getData() 返回数据缓冲区
byte[] datas = dp.getData();
int len = dp.getLength();
String dataString = new String(datas, 0, len);
System.out.println("数据是:" + dataString);

//5.关闭接收端
ds.close();
           

TCP通信程序

TCP发送数据

//1.创建客户端的Socket对象(Socket)
//Socket (InetAddress address, int port) 创建套接字并将其连接到指定IP地址的指定端口号
//Socket s = new Socket(InetAddress.getByName("172.19.10.8"), 100);
//Socket(String host, int port)
Socket s = new Socket("172.19.10.8", 100);

//2.获取输出流,写数据
OutputStream os = s.getOutputStream();
os.write("hello, tcp, 我来了".getBytes());

//3.关闭客户端
s.close();
           

TCP接收数据

//1. 创建服务器端的Socket对象(ServerSocket)
//ServerSocket(int port) 创建绑定到指定端口的服务器套接字
ServerSocket ss = new ServerSocket(100);
//Socket accept() 倾听要连接到此套接字并接受它
Socket s = ss.accept();

//2.获取输入流,读数据,并把数据显示在控制台
InputStream is = s.getInputStream();
byte[] bys = new byte[1024];
int len = is.read(bys);
String data = new String(bys, 0, len);
System.out.println("数据是:" + data);

//3.释放资源
s.close();
ss.close();