Java nineteen 网络程序设计 UDP通信

1、UDP(User Datagram Protocol 用户数据报协议),网络信息传输的另一种形式。相较TCP,基于UDP的信息传递更快,但不提供可靠保证。用户无法知道数据能否正确到达,也不确定其到达顺序与发送顺序的一致。

2、DatagramSocket类

创建UDP程序的套接字。

方法:

new DatagramSocket(int port); //绑定到指定端口


new DatagramSocket(int port,InetAddress address);


serverSocket.send(packet);//发送数据包


serverSocket.receive(recvPacket);//接收

3、DatagramPacket类

数据报包,实现包投递服务。

方法:

//buf:保存传入数据包的缓存区

//length:要读取的字节数

new DatagramPacket(byte[] buf,int length) ;

/*指定数据包大小,目标地址,端口号*/

new DatagramPacket(byte[] buf,int length,InetAddress address,int port);

//address:目的地址

//port:目的端口号
//Server

 package Nineteen;

import java.net.DatagramSocket;

import java.net.DatagramPacket;

import java.net.InetAddress;

public class DatagramServer {
 public static void main(String[] args){
  
  DatagramSocket serverSocket;//创建数据包套接字

  try{
   serverSocket = new DatagramSocket(6666);
   byte[] recvBuf = new byte[100];
   /*java.net.DatagramPacket.DatagramPacket(byte[] buf, int length)
 Constructs a DatagramPacket for receiving packets of length length. 
 The length argument must be less than or equal to buf.length.
 Parameters:
 buf buffer for holding the incoming datagram.
 
 length the number of bytes to read.创建数据包*/
   DatagramPacket recvPacket = new DatagramPacket(recvBuf,recvBuf.length);
   //recvPacket:the DatagramPacket into which to place the incoming data.
   serverSocket.receive(recvPacket);
 
   /*java.lang.String.String(byte[] bytes, int offset, int length)
   Parameters:
    bytes The bytes to be decoded into characters
    offset The index of the first byte to decode
    length The number of bytes to decode*/
   /*byte[] java.net.DatagramPacket.getData()
  
   Returns:
    the buffer used to receive or send data*/
   String recvStr = new String(recvPacket.getData(),0,recvPacket.getLength());
   System.out.println("Hello!" + recvStr);
  
   //int java.net.DatagramPacket.getPort()
 
   int port = recvPacket.getPort();
   InetAddress address = recvPacket.getAddress();
   String sendStr = "服务器发送的信息";
   byte[] sendBuf;
   sendBuf = sendStr.getBytes();
   /*java.net.DatagramPacket.DatagramPacket(byte[] buf, int length, InetAddress address, int port) */
   DatagramPacket sendPacket = new DatagramPacket(sendBuf,sendBuf.length,address,port);
   serverSocket.send(sendPacket);
   serverSocket.close();
   
  }catch(Exception e){
   e.printStackTrace();
  }
 }
}
//client

 package Nineteen;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.DatagramPacket;

public class DatagramClient {

 static DatagramSocket clientSocket;

 public static void main(String[] args){
  try{
   clientSocket = new DatagramSocket();
   String sendStr = "hello.I am Client";
   byte[] sendBuf;
   sendBuf = sendStr.getBytes();
   InetAddress addr = InetAddress.getByName("127.0.0.1");
   int port = 6666;
   DatagramPacket sendPacket = new DatagramPacket(sendBuf,sendBuf.length,addr,port);
   clientSocket.send(sendPacket);
   byte[] recvBuf = new byte[100];
   DatagramPacket recvPacket = new DatagramPacket(recvBuf,recvBuf.length);
   clientSocket.receive(recvPacket);
   String recvStr = new String(recvPacket.getData(),0,recvPacket.getLength());
   System.out.println("received :" + recvStr);
   clientSocket.close();
  }catch(Exception e){
   e.printStackTrace();
  }
 }
}

 

 

你可能感兴趣的:(Java nineteen 网络程序设计 UDP通信)