udp socket java_Java基于socket服务实现UDP协议的方法

本文实例讲述了Java基于socket服务实现UDP协议的方法。分享给大家供大家参考。具体如下:

示例1:

接收类:

package com.socket.demo;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

public class UDPReceiveDemo {

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

System.out.println("接收端启动…………");

/*

2、建立UDP的socket的服务,必须明确一个端口号

3、创建数据包,用于储存接收到的数据,方便用数据包对象的方法解析这些数据

4、使用DatagramSocket的receive方法将接收到的数据存储到数据包中

5、通过数据包的方法解析数据包中的数据

5、关闭socket服务

*/

//udpsocket服务,使用DatagramSocket对象

DatagramSocket ds=new DatagramSocket(10002);

//使用DatagramPacket将数据封装到该对象中

byte[] buf=new byte[1024];

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

//通过udp的socket服务将数据包发送出去,通过send方法

ds.receive(dp);

//通过数据包的方法解析数据包中的数据,比如,地址、端口、数据内容等

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

//String name=dp.getAddress().getHostName();

int port=dp.getPort();

String text=new String(dp.getData(),0,dp.getLength());

//System.out.println("-----"+ip+"-----"+name+"-----"+port+"-----"+text);

System.out.println("-----"+ip+"----------"+port+"-----"+text);

//关闭资源

ds.close();

}

}

发送类:

package com.socket.demo;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

import java.net.UnknownHostException;

public class UDPSendDemo {

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

System.out.println("发送端启动…………");

/*

* 1、创建udp传输的发送端

2、建立UDP的socket的服务

3、将要发送的数据封装到数据包中

4、通过udp的socket服务将数据包发送出去

5、关闭socket服务

*/

//udpsocket服务,使用DatagramSocket对象

DatagramSocket ds=new DatagramSocket(8888);//监听端口

//将要发送的数据封装到数据包中

String str="udp传输演示,go";

//使用DatagramPacket将数据封装到该对象中

byte[] buf=str.getBytes();

DatagramPacket dp=

new DatagramPacket(buf, buf.length,InetAddress.getByName("192.168.1.100"),10002);

//通过udp的socket服务将数据包发送出去,通过send方法

ds.send(dp);

//关闭资源

ds.close();

}

}

示例2:

接收类:

package com.socket.demo;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

public class UDPReceiveDemo2 {

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

System.out.println("接收端启动…………");

/*

2、建立UDP的socket的服务,必须明确一个端口号

3、创建数据包,用于储存接收到的数据,方便用数据包对象的方法解析这些数据

4、使用DatagramSocket的receive方法将接收到的数据存储到数据包中

5、通过数据包的方法解析数据包中的数据

5、关闭socket服务

*/

//udpsocket服务,使用DatagramSocket对象

DatagramSocket ds=new DatagramSocket(10003);

while(true){

//使用DatagramPacket将数据封装到该对象中

byte[] buf=new byte[1024];

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

//通过udp的socket服务将数据包发送出去,通过send方法

ds.receive(dp);//阻塞式的。

//通过数据包的方法解析数据包中的数据,比如,地址、端口、数据内容等

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

//String name=dp.getAddress().getHostName();

int port=dp.getPort();

String text=new String(dp.getData(),0,dp.getLength());

//System.out.println("-----"+ip+"-----"+name+"-----"+port+"-----"+text);

System.out.println("-----"+ip+"----------"+port+"-----"+text);

}

//关闭资源

//ds.close();

}

}

发送类:

package com.socket.demo;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

public class UDPSendDemo2 {

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

System.out.println("发送端启动…………");

/*

* 1、创建udp传输的发送端

2、建立UDP的socket的服务

3、将要发送的数据封装到数据包中

4、通过udp的socket服务将数据包发送出去

5、关闭socket服务

*/

//udpsocket服务,使用DatagramSocket对象

DatagramSocket ds=new DatagramSocket(9999);//监听端口

//将要发送的数据封装到数据包中

//String str="udp传输演示,go";

BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));//键盘输入

String line=null;

//使用DatagramPacket将数据封装到该对象中

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

byte[] buf=line.getBytes();//

DatagramPacket dp=

new DatagramPacket(buf, buf.length,InetAddress.getByName("192.168.1.100"),10003);

//通过udp的socket服务将数据包发送出去,通过send方法

ds.send(dp);

if("886".equals(line)){

break;

}

}

//关闭资源

ds.close();

}

}

运行效果图如下:

接收:

fbe3333d1d32897dade576f18161cb88.png

发送:

e457cb2aed8d4a403dbdf66995d78b61.png

希望本文所述对大家的java程序设计有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值