Rumah >Java >javaTutorial >java Socket UDP实例详解

java Socket UDP实例详解

高洛峰
高洛峰asal
2017-02-03 13:20:491431semak imbas

UDP编程示例

服务器端:

package socket;
  
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
  
public class UDPServer {
  
    
  public static void main(String[] args) throws IOException {
    byte[] buf = new byte[1024];
    DatagramPacket dp = new DatagramPacket(buf, buf.length);//声明一个用来接收数据的“包裹”
    DatagramSocket ds = new DatagramSocket(5678);//指定的是UDP中的端口号5678,在TCP中,还有另外一个端口号为5678的端口
    while(true){
      ds.receive(dp); //阻塞式的
      System.out.println(new String(buf,0,dp.getLength()));//dp中获取的数据的长度
    }
  
  }
  
}

   

客户端:

package socket;
  
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
  
public class UDPClient {
  
  public static void main(String[] args) throws IOException {
    byte[] buf = new String("Hello").getBytes();
    //UDP是无连接的,所以要在发送的数据包裹中指定要发送到的ip:port
    DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1", 5678));
    DatagramSocket ds = new DatagramSocket(9999); //指明发送端的端口号
    ds.send(dp);
    ds.close();
  }
  
}

   

说明:

1. 严格意义上来讲,UDP没有server和client之分,不像TCP中有ServerSocket和Socket,UDP中只有DatagramSocket。

2. UDP和TCP的端口是分开的,例如UDP有一个端口号为5678的端口,TCP也有一个端口号为5678的端口。

3. UDP是无连接的,所以要在发送的数据包裹中指定要发送到的ip:port。

4. 如果要发送long、int等类型的数据,则需要使用到ByteArrayOutputStream、DataOutputStream、ByteArrayInputStream、ByteArrayInputStream流类型,如下:

服务器端:

package socket;
  
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
  
public class UDPServer {
  
    
  public static void main(String[] args) throws IOException {
    byte[] buf = new byte[1024];
    DatagramPacket dp = new DatagramPacket(buf, buf.length);
    DatagramSocket ds = new DatagramSocket(5678);
    ByteArrayInputStream bais = null;
    DataInputStream dos = null;
    while(true){
      ds.receive(dp); 
      bais = new ByteArrayInputStream(buf);
      dos = new DataInputStream(bais);
      System.out.println(dos.readLong());
    }
  
  }
  
}

   

客户端:

package socket;
  
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
  
public class UDPClient {
  
  public static void main(String[] args) throws IOException {
    byte[] buf = null;
    long l = 100000L;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    DataOutputStream dos = new DataOutputStream(baos);
    dos.writeLong(l);
    buf = baos.toByteArray();
    DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1", 5678));
    DatagramSocket ds = new DatagramSocket(9999); 
    ds.send(dp);
    ds.close();
 
 
        dos.close();
  }
  
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多java Socket UDP实例详解相关文章请关注PHP中文网!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn