美文网首页
Java网络编程之UDP网络通信

Java网络编程之UDP网络通信

作者: 征程_Journey | 来源:发表于2017-05-21 11:28 被阅读0次

1      网络编程----UDPNo25

【Scanner scanner =new Scanner(System.in);

try {

DatagramSockets = newDatagramSocket(8888);

String line =scanner.nextLine();

byte[] bytes =line.getBytes();//把用户输入的字符串拆成字节数组

//把字节数组塞进包里,写上对方的地址和端口

try {

DatagramPacketp = new DatagramPacket(bytes, bytes.length,

InetAddress.getByName("127.0.0.1"),9999);

s.send(p);//发送包裹

s.close();

scanner.close();

DatagramSockets = new DatagramSocket(9999);

byte[] bytes = newbyte[1024];

DatagramPacket p =new DatagramPacket(bytes, bytes.length);//准备空包

s.receive(p);//接收,空包裹被填满

String str = newString(bytes,0,p.getLength()); //用字节数组的有效数据组装回字符串

System.out.println(str);

s.close();

2:bytes

DatagramSocket s =new DatagramSocket(9999);

byte[] bytes = newbyte[128];//用于存放接收数据的数组

//用于存放接收数据的空数据报包,字节数组放置其中

DatagramPacket p =new DatagramPacket(bytes, bytes.length);

s.receive(p);//接收其他收发站发来的数据,阻塞方法,收到才返回

for(int i=0;i

System.out.println(bytes[i]);  //下标为0,1,2,3

}

s.close();//关闭收发站

DatagramSocket s =new DatagramSocket(8888);//在8888上建立收发站

byte[] bytes = { 1,2, 3 };//要发送的数据

//建立一个包,把要发送的数据塞进去,写上对方的地址和端口9999

DatagramPacket p =new DatagramPacket(bytes, bytes.length,

InetAddress.getByName("127.0.0.1"),9999);

s.send(p);

s.close();//关闭收发站

UDP UserDatagram Protocol用户数据报协议

也是传输层的一个协议,信息传输时不需要连接,不可靠,效率较高

1.1    Java进行UDP通信

Java进行UDP通信:

DatagramSocket相当于一个收发站(信息发送站)

构造方法:DatagramSocket(int port)在port端口上建立收发站

send(DatagramPacketp)发送数据报包

receive(DatagramPacketp)接受数据报包,阻塞方法,一旦收到对象发过来的包,这个DatagramPacket中的存放数据的字节数组就会自动填充对方发过来的信息

DatagramPacket数据报包,收发站要进行收发的包(信息接收站)

构造方法:

一、发送的包:

DatagramPacket(byte[]bytes,int len,InetAddress addr,int port)第一个参数表示字节数组形式的发送数据,第二个参数是包的长度,一般是字节数组的长度,第三个参数是接收方的地址,第四个参数接收方的端口)

二、接收的包:

DatagramPacket(byte[]bytes,int len)

第一个参数是存放接收数据的数组,第二个是接收数据的长度

getLength()获取包的有效长度

InetAddress.getByName(Stringaddress)根据字符串生成一个地址对象

getAddress()获得一个InetAddress对象,表示发送方地址,再调用这个对象的getHostAddress()获取字符串形式的地址

int getPort()获取端口号

1.2    网络编程实战UDP

DatagramSocket类:《此类表示用来发送和接收数据报包的套接字;特点:既能发送又能接收》

DatagramPacket类:《此类表示数据报包。数据报包用来实现无连接包投递服务。每条报文仅根据该包中包含的信息从一台机器路由到另一台机器。》

使用步骤:【发送端:《1、创建套接字对象     2、封装数据报包

3、发送数据报包       4、释放资源》

【接收端:《1、创建套接字对象     2、创建数据报包,用于接收数据

1、 通过receive方法接收数据并保存到数据报包中  4、释放资源》

示例代码:

发送端《

publicclass SendDemo {

public static void main(String[] args)throws Exception{

// UDP的发送端

System.out.println("UDP发送端开启.....");

// 创建Socket对象

DatagramSocket socket = newDatagramSocket();

// 创建数据报包

byte[] buf = "来自udp发送端的数据".getBytes();

DatagramPacket packet = newDatagramPacket(buf, 0, buf.length,

InetAddress.getLocalHost(),6666);

//发送数据

socket.send(packet);

//释放资源

socket.close();

System.out.println("UDP发送端关闭.....");

}

}

接收端《

publicclass ReceiveDemo {

public static void main(String[] args)throws Exception {

// udp接收端

System.out.println("UDP接收端开启.....");

//创建Socket对象

DatagramSocket socket = newDatagramSocket(6666);

//创建一个空的字节数组,是真正保存接收数据的容器

byte[] buf = newbyte[65536];//1024*64=65536

//创建一个空的数据报包,用于接收来自发送端的数据

DatagramPacket packet = newDatagramPacket(buf, buf.length);

//阻塞式方法,接收数据,将接收到的数据保存到指定的数据报包中

socket.receive(packet);

//从数据报包中获取数据

String ip =packet.getAddress().getHostAddress();

//               packet.getData()

//接收数据

String data = new String(buf,0, buf.length);

System.out.println("接收到来自"+ip+"的数据"+data);

System.out.println("UDP接收端关闭.....");

//释放资源

socket.close();

}

}

1.3    简易聊天室

练习:使用UDP协议实现一个DOS版的简易聊天室

publicclass UdpExercise {

public static void main(String[] args){

// TODO Auto-generated methodstub

//开启接收消息的线程

new Thread(newReceiveMsg()).start();

//开启一个发送消息的线程

new Thread(newSendMsg()).start();

}

}

//UDP接收器

class ReceiveMsg implements Runnable{

@Override

public void run() {

// TODOAuto-generated method stub

DatagramSocketsocket = null;

try {

socket =new DatagramSocket(8888);

for(;;){

byte[]buf = new byte[1024];

DatagramPacketpacket = new DatagramPacket(buf, buf.length);

socket.receive(packet);

Stringip = packet.getAddress().getHostAddress();

Stringdata = new String(buf, 0, packet.getLength());

System.out.println(ip+":"+data);

}

} catch(SocketException e) {

// TODOAuto-generated catch block

e.printStackTrace();

} catch (IOExceptione) {

// TODOAuto-generated catch block

e.printStackTrace();

}finally{

if(socket!=null){

socket.close();

socket=null;

}

}

}

}

//udp发送器

class SendMsg implements Runnable {

DatagramSocket socket = null;

@Override

public void run() {

// TODOAuto-generated method stub

try {

socket =new DatagramSocket();

BufferedReaderbr = new BufferedReader(new InputStreamReader(

System.in));

String line= null;

while((line = br.readLine()) != null) {

byte[]buf = line.getBytes();

DatagramPacketpacket = new DatagramPacket(buf, 0,

buf.length,InetAddress.getByName("192.168.95.255"),

8888);

socket.send(packet);

}

} catch (Exceptione) {

// TODOAuto-generated catch block

e.printStackTrace();

}finally{

if(socket!= null){

socket.close();

socket= null;

}

}

}

}

相关文章

  • Java网络编程之UDP网络通信

    1 网络编程----UDPNo25 【Scanner scanner =new Scanner(System....

  • udp网络通信

    udp网络通信 1.网络概念 1.1 IP地址 ip 是网络中一台计算机唯一标识 ip地址 xxx.xxx.xx...

  • 网络通信UDP

    TCP/IP协议 四层表示:链路层--->网络层--->传输层--->应用层七层表示:物理层--->数据链路层--...

  • Java网络编程之TCP网络通信

    1 网络编程----TCPNo24 【 public class Server { public static...

  • Java网络编程之UDP协议

    今天我们来聊聊 网络编程这部分的内容 网络编程 1)计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外...

  • 初见Linux-socket

    什么叫网络编程? 就是使用网络协议,进行网络通信。数据报->UDP 流式套接字-> TCP 原始套...

  • (二)网络编程之各种协议

    TCP和UDP 1.网络通信协议 网络通信协议:为什么要有网络通信协议呢?就好比在现实中要有法律法规一样,这样才能...

  • 网络编程

    今日介绍内容 1、网络通信协议 2、UDP通信 3、TCP通信 第一章 网络通信协议 通过计算机网络可以使...

  • 网络通信-TCP/UDP

    参考:https://blog.csdn.net/zhang6223284/article/details/814...

  • Java网络编程基于UDP协议

    Java网络编程基于UDP协议 UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据报的方法。 编...

网友评论

      本文标题: Java网络编程之UDP网络通信

      本文链接:https://www.haomeiwen.com/subject/erbmxxtx.html