Heim > Java > javaLernprogramm > Detaillierte Erläuterung der Java Socket UDP-Instanz

Detaillierte Erläuterung der Java Socket UDP-Instanz

高洛峰
Freigeben: 2017-02-03 13:20:49
Original
1438 Leute haben es durchsucht

UDP-Programmierbeispiel

Server:

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中获取的数据的长度
    }
  
  }
  
}
Nach dem Login kopieren

Client:

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();
  }
  
}
Nach dem Login kopieren

Erklärung:

1. Streng genommen unterscheidet UDP nicht zwischen Server und Client. Im Gegensatz zu TCP, das über ServerSocket und Socket verfügt, verfügt UDP nur über DatagramSocket.

2. Die Ports von UDP und TCP sind getrennt. Beispielsweise hat UDP die Portnummer 5678 und TCP hat auch die Portnummer 5678.

3. UDP ist verbindungslos, daher muss der zu sendende IP:Port im gesendeten Datenpaket angegeben werden.

4. Wenn Sie Long-, Int- und andere Datentypen senden möchten, müssen Sie die Stream-Typen ByteArrayOutputStream, DataOutputStream, ByteArrayInputStream und ByteArrayInputStream wie folgt verwenden:

Serverseite:

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());
    }
  
  }
  
}
Nach dem Login kopieren

Client:

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();
  }
  
}
Nach dem Login kopieren

Vielen Dank fürs Lesen, ich hoffe es Kann jedem helfen, vielen Dank an alle. Unterstützen Sie diese Seite!

Ausführlichere Java-Socket-UDP-Beispiele und verwandte Artikel finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage