基于UDP的Socket编程
1>>基于UDP的Socket编程用到的类和方法
DatagramSocket 数据报Socket对象
常用方法:ds.send(DatagramPacket)发送UDP包, ds.receive(DatagramPacket)接收UDP包;
DatagramPacket UDP包对象
常用方法:1 new DatagramPacket(byte[],length) 常用来接收数据。
2 new DatagramPacket(bytes[],length,InetAddress,port) 常用来发送数据。
2>>一个基于UDP协议的Socket编程。实现服务器/客户端的发送/接收数据
import java.net.*;
//基于UDP的Socket编程 服务器端代码
public class UDPServer
{
public static void main(String[] args)
{
receive();
}
public static void receive()
{
try{
//创建数据报套接字,并绑定到固定端口。
DatagramSocket ds = new DatagramSocket(6000);
System.out.println("服务器端启动...");
byte[] buf = new byte[100]; //声明byte数组,用于接收客户端Client输入
//创建接收数据的UDP包 new DatagramPacket(byte[],length);
DatagramPacket dp = new DatagramPacket(buf,100);
ds.receive(dp); //服务器端Server读取客户端Client的数据,并将数据保存到UDP包对象中
System.out.println(new String(buf,0,dp.getLength())); //服务器端输出客户端输入信息。
String mess = "welcome you!"; //服务器端响应客户端信息
//创建发送数据的UDP包对象 new DatagramPacket(bytes[],length,IPAddress,port);
DatagramPacket senddp = new DatagramPacket(mess.getBytes(),mess.length(),dp.getAddress(),dp.getPort());
//服务器端向客户端发送反馈信息
ds.send(senddp);
//数据报套接字关闭
ds.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
客户端代码:
import java.net.*;
//基于UDP的SOcket编程的客户端代码
public class UDPClient
{
public static void main(String[] args)
{
send();
}
public static void send()
{
try{
//创建数据报套接字
DatagramSocket ds = new DatagramSocket();
String str = "hello ,i am dajian";//客户端即将发送的数据
//创建发送数据的UDP包对象 new DatagramPacket(bytes[] ,length,InetAddress,port)
DatagramPacket dp = new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("localhost"),6000);
//向服务器端发送数据
ds.send(dp);
byte[] buf = new byte[100]; //用于接收数据的数组
//创建结束服务器端数据的UDP包对象 new DatagramPacket(bytes[] ,length)
DatagramPacket receivedp = new DatagramPacket(buf,100);
//接收服务器端信息,保存到UDP包对象中
ds.receive(receivedp);
System.out.println(new String(buf,0,receivedp.getLength()));//客户端打印服务器端响应的信息
ds.close(); //关闭数据报套接字
}
catch(Exception e){
e.printStackTrace();
}
}
}
3>>图片演示java Swing组建和URL实现文件下载(下载thml网页为例)
接上一张
》》字节流读取和写出文件:源码读取源码写入。不会出现数据丢失的情况(上例会出现丢失)

DatagramSocket 数据报Socket对象
常用方法:ds.send(DatagramPacket)发送UDP包, ds.receive(DatagramPacket)接收UDP包;
DatagramPacket UDP包对象
常用方法:1 new DatagramPacket(byte[],length) 常用来接收数据。
2 new DatagramPacket(bytes[],length,InetAddress,port) 常用来发送数据。
2>>一个基于UDP协议的Socket编程。实现服务器/客户端的发送/接收数据
import java.net.*;
//基于UDP的Socket编程 服务器端代码
public class UDPServer
{
public static void main(String[] args)
{
receive();
}
public static void receive()
{
try{
//创建数据报套接字,并绑定到固定端口。
DatagramSocket ds = new DatagramSocket(6000);
System.out.println("服务器端启动...");
byte[] buf = new byte[100]; //声明byte数组,用于接收客户端Client输入
//创建接收数据的UDP包 new DatagramPacket(byte[],length);
DatagramPacket dp = new DatagramPacket(buf,100);
ds.receive(dp); //服务器端Server读取客户端Client的数据,并将数据保存到UDP包对象中
System.out.println(new String(buf,0,dp.getLength())); //服务器端输出客户端输入信息。
String mess = "welcome you!"; //服务器端响应客户端信息
//创建发送数据的UDP包对象 new DatagramPacket(bytes[],length,IPAddress,port);
DatagramPacket senddp = new DatagramPacket(mess.getBytes(),mess.length(),dp.getAddress(),dp.getPort());
//服务器端向客户端发送反馈信息
ds.send(senddp);
//数据报套接字关闭
ds.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
客户端代码:
import java.net.*;
//基于UDP的SOcket编程的客户端代码
public class UDPClient
{
public static void main(String[] args)
{
send();
}
public static void send()
{
try{
//创建数据报套接字
DatagramSocket ds = new DatagramSocket();
String str = "hello ,i am dajian";//客户端即将发送的数据
//创建发送数据的UDP包对象 new DatagramPacket(bytes[] ,length,InetAddress,port)
DatagramPacket dp = new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("localhost"),6000);
//向服务器端发送数据
ds.send(dp);
byte[] buf = new byte[100]; //用于接收数据的数组
//创建结束服务器端数据的UDP包对象 new DatagramPacket(bytes[] ,length)
DatagramPacket receivedp = new DatagramPacket(buf,100);
//接收服务器端信息,保存到UDP包对象中
ds.receive(receivedp);
System.out.println(new String(buf,0,receivedp.getLength()));//客户端打印服务器端响应的信息
ds.close(); //关闭数据报套接字
}
catch(Exception e){
e.printStackTrace();
}
}
}
3>>图片演示java Swing组建和URL实现文件下载(下载thml网页为例)
接上一张
》》字节流读取和写出文件:源码读取源码写入。不会出现数据丢失的情况(上例会出现丢失)