当前位置: 移动技术网 > IT编程>开发语言>Java > java Socket UDP实例详解

java Socket UDP实例详解

2019年07月22日  | 移动技术网IT编程  | 我要评论

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(); 
  } 
 
} 

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网