您的位置:首页 > 理论基础 > 计算机网络

Java学习日志(23-2-网络编程-UDP传输)

2016-10-21 00:00 357 查看
UDP传输

DatagramSocket与DatagramPacket

建立发送端、接收端

建立数据包

调用Socket的发送接收方法

关闭Socket

*发送端与接收端是两个独立的运行程序

UDP发送端

// UDP发送端
public static void UDPsend()throws Exception{
// 通过DatagramSocket创建UDP服务
DatagramSocket ds=new DatagramSocket();
// 确定数据,并封装
byte[]buf="udp".getBytes();
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.1"),10000);
// 通过socket服务发送,通过seng();
ds.send(dp);
// 关闭资源
ds.close();
}

UDP接收端

// UDP接收端
public static void UDPrece()throws Exception{
// 创建socket服务,建立端点
DatagramSocket dsr=new DatagramSocket();
// 定义数据包,用于存储
byte[]bufr=new byte[1024];
DatagramPacket dpr=new DatagramPacket(bufr,bufr.length);
// 通过服务的receive()将收到的数据存入包中
dsr.receive(dpr);
// 通过数据包的方法获取其中的数据
String ip=dpr.getAddress().getHostAddress();
String data=new String(dpr.getData(),dpr.getLength());
int port=dpr.getPort();
System.out.println(ip+"::"+data+"::"+port);
// 关闭资源
dsr.close();
}

UDP键盘录入(实则分为两个class运行)

import java.net.*;
import java.io.*;
class UDPDemo2{
public static void main(String[] args)throws Exception{
UDPsend();
}
public static void UDPsend()throws Exception{
DatagramSocket ds=new DatagramSocket();
BufferedReader bufr=
new BufferedReader(new InputStreamReader(System.in));
String line=null;
while((line=bufr.readLine())!=null){
if("886".equals(line)){
break;
}
byte[]buf=line.getBytes();
DatagramPacket dp=
new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.1"),10001);
ds.send(dp);
}
ds.close();
}
public static void UDPrece()throws Exception{
DatagramSocket dsr=new DatagramSocket(10001);
while(true){
byte[]bufr=new byte[1024];
DatagramPacket dpr=new DatagramPacket(bufr,bufr.length);
dsr.receive(dpr);
String ip=dpr.getAddress().getHostAddress();
String data=new String(dpr.getData(),0,dpr.getLength());
System.out.println(ip+"::"+data);
}
}
}

UDP练习-聊天程序

/*
编写一个聊天程序
有收数据的部分和发数据的部分
两部分同时执行,需要用到多线程技术
因为收发动作不一致,因此要定义两个run(),并且封装到不同的类中
*/
import java.net.*;
import java.io.*;
class ChatDemo{
public static void main(String[] args)throws Exception{
DatagramSocket sendsocket=new DatagramSocket();
DatagramSocket recesocket=new DatagramSocket(10002);
new Thread(new Send(sendsocket)).start();
new Thread(new Rece(recesocket)).start();
}
}
class Send implements Runnable{
private DatagramSocket ds;
public Send(DatagramSocket ds){
this.ds=ds;
}
public void run(){
try{
BufferedReader bufr=
new BufferedReader(new InputStreamReader(System.in));
String line=null;
while((line=bufr.readLine())!=null){
if("886".equals(line)){
break;
}
byte[]buf=line.getBytes();
DatagramPacket dp=
new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.1"),10001);
ds.send(dp);
}
}
catch(Exception e){
throw new RuntimeException("发送端失败");
}
}
}
class Rece implements Runnable{
private DatagramSocket ds;
public Rece(DatagramSocket ds){
this.ds=ds;
}
public void run(){
try{
while(true){
byte[]buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
ds.receive(dp);
String ip=dp.getAddress().getHostAddress();
String data=new String(dp.getData(),0,dp.getLength());
System.out.println(ip+"::"+data);
}
}
catch(Exception
3ff0
e){
throw new RuntimeException("接收端失败");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: