- UDP网络编程的案例代码
- 普通接收方/发送方代码
- 多线程方式代码
用于描述发送发与接收方之间的通信
普通接收方/发送方代码- 接收方
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Socket;
/**
* 接收方
*/
public class ReveiverTest {
public static void main(String[] args) {
DatagramSocket ds = null;
try {
// 1.创建DatagramSocket类型的对象并提供端口号
ds = new DatagramSocket(8888);
byte[] bArr = new byte[50];
// 2.创建DatagramPacket类型的对象并提供缓冲区
DatagramPacket dp = new DatagramPacket(bArr, bArr.length);
// 3.通过Socket接收数据内容存放到Packet中,调用receive方法
ds.receive(dp);
System.out.println("接收到的数据内容为" + new String(bArr, 0, dp.getLength()));
String ss = "我收到了";
byte[] bytes = ss.getBytes();
DatagramPacket dp2 = new DatagramPacket(bytes, bytes.length, dp.getAddress(), dp.getPort());
ds.send(dp2);
System.out.println("回复消息成功");
} catch (IOException e) {
e.printStackTrace();
} finally {
// 4.关闭Socket
if (null != ds) {
ds.close();
}
}
}
}
- 发送方
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* 发送方
*/
public class SendTest {
public static void main(String[] args) {
DatagramSocket ds = null;
try {
// 1. 创建DatagramSocket类型的对象
ds = new DatagramSocket();
String s = "你好世界";
byte[] bytes = s.getBytes();
// 2.创建DatagramPacket类型的对象并提供接收方的通信地址
DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress.getLocalHost(), 8888);
// 3.通过Socket将Packet中的数据内容发送出去,调用send方法
ds.send(dp);
byte[] bArr2 = new byte[50];
System.out.println("发送数据成功");
DatagramPacket dp2 = new DatagramPacket(bArr2, bArr2.length);
ds.receive(dp2);
System.out.println("回复消息接收成功,内容为:" + new String(bArr2, 0, dp2.getLength()));
} catch (IOException e) {
e.printStackTrace();
} finally {
// 4.关闭Socket
ds.close();
}
}
}
多线程方式代码
- 多线程
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class ThreadsTest implements Runnable{
@Override
public void run() {
DatagramSocket ds = null;
try {
ds = new DatagramSocket(8888);
byte[] bArr = new byte[50];
DatagramPacket dp = new DatagramPacket(bArr, bArr.length);
while (true) {
// 3.通过Socket接收数据内容存放到Packet中,调用receive方法
ds.receive(dp);
System.out.println("接收到的数据内容为" + new String(bArr, 0, dp.getLength()));
String ss = "我收到了";
byte[] bytes = ss.getBytes();
DatagramPacket dp2 = new DatagramPacket(bytes, bytes.length, dp.getAddress(), dp.getPort());
ds.send(dp2);
System.out.println("回复消息成功");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != ds) {
ds.close();
}
}
}
}
- 接收方
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* 接收方
*/
public class ReveiverTest2 {
public static void main(String[] args) {
ThreadsTest threadsTest = new ThreadsTest();
Thread thread = new Thread(threadsTest);
thread.start();
}
}
- 发送方(发送方代码复制多份即可表示多个发送方)
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* 发送方
*/
public class SendTest1 {
public static void main(String[] args) {
DatagramSocket ds = null;
try {
// 1. 创建DatagramSocket类型的对象
ds = new DatagramSocket();
String s = "你好世界";
byte[] bytes = s.getBytes();
// 2.创建DatagramPacket类型的对象并提供接收方的通信地址
DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress.getLocalHost(), 8888);
// 3.通过Socket将Packet中的数据内容发送出去,调用send方法
ds.send(dp);
byte[] bArr2 = new byte[50];
System.out.println("发送数据成功");
DatagramPacket dp2 = new DatagramPacket(bArr2, bArr2.length);
ds.receive(dp2);
System.out.println("回复消息接收成功,内容为:" + new String(bArr2, 0, dp2.getLength()));
} catch (IOException e) {
e.printStackTrace();
} finally {
// 4.关闭Socket
ds.close();
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)