ホームページ  >  記事  >  Java  >  Java Socket UDP インスタンスの詳細な説明

Java Socket UDP インスタンスの詳細な説明

高洛峰
高洛峰オリジナル
2017-02-03 13:20:491404ブラウズ

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. TCP とは異なり、UDP にはサーバーとクライアントの区別がありません。などと 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 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。