发送步骤:
使用 DatagramSocket(int port) 建立socket(套间字)服务。
将数据打包到DatagramPacket中去
通过socket服务发送 (send()方法)
关闭资源
import java.io.IOExceptionimport java.net.*
public class Send {
public static void main(String[] args) {
DatagramSocket ds = null //建立套间字udpsocket服务
try {
ds = new DatagramSocket(8999) //实例化套间字,指定自己的port
} catch (SocketException e) {
System.out.println("Cannot open port!")
System.exit(1)
}
byte[] buf= "Hello, I am sender!".getBytes() //数据
InetAddress destination = null
try {
destination = InetAddress.getByName("192.168.1.5") //需要发送的地址
} catch (UnknownHostException e) {
System.out.println("Cannot open findhost!")
System.exit(1)
}
DatagramPacket dp =
new DatagramPacket(buf, buf.length, destination , 10000)
//打包到DatagramPacket类型中(DatagramSocket的send()方法接受此类,注意10000是接受地址的端口,不同于自己的端口!)
try {
ds.send(dp) //发送数据
} catch (IOException e) {
}
ds.close()
}
}
接收步骤:
使用 DatagramSocket(int port) 建立socket(套间字)服务。(我们注意到此服务即可以接收,又可以发送),port指定监视接受端口。
定义一个数据包(DatagramPacket),储存接收到的数据,使用其中的方法提取传送的内容
通过DatagramSocket 的receive方法将接受到的数据存入上面定义的包中
使用DatagramPacket的方法,提取数据。
关闭资源。
import java.net.*
public class Rec {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket(10000) //定义服务,监视端口上面的发送端口,注意不是send本身端口
byte[] buf = new byte[1024]//接受内容的大小,注意不要溢出
DatagramPacket dp = new DatagramPacket(buf,0,buf.length)//定义一个接收的包
ds.receive(dp)//将接受内容封装到包中
String data = new String(dp.getData(), 0, dp.getLength())//利用getData()方法取出内容
System.out.println(data)//打印内容
ds.close()//关闭资源
}
}
创建两个类 分别添加main方法 一个作为server类一个作为client类
客户端先发送再接收 服务器端先接收再发送
下面给你一个server和client的例子 你在基础上改一下就行了
client发送的时候发送三边值 server接收后 写一个计算三角形面积的函数 把接收到的三边值传入函数计算出结果作为数据返回到client端
/***UDPServer
*/
import java.io.*
import java.net.*
class UDPServer{
public static void main(String[] args)throws IOException{
DatagramSocket server = new DatagramSocket(5050)
byte[] recvBuf = new byte[100]
DatagramPacket recvPacket
= new DatagramPacket(recvBuf , recvBuf.length)
server.receive(recvPacket)
String recvStr = new String(recvPacket.getData() , 0 , recvPacket.getLength())
System.out.println("Hello World!" + recvStr)
int port = recvPacket.getPort()
InetAddress addr = recvPacket.getAddress()
String sendStr = "Hello ! I'm Server"
byte[] sendBuf
sendBuf = sendStr.getBytes()
DatagramPacket sendPacket
= new DatagramPacket(sendBuf , sendBuf.length , addr , port )
server.send(sendPacket)
server.close()
}
} /**
*UDPClient
*/
import java.io.*
import java.net.*
class UDPClient{
public static void main(String[] args)throws IOException{
DatagramSocket client = new DatagramSocket()
String sendStr = "Hello! I'm Client"
byte[] sendBuf
sendBuf = sendStr.getBytes()
InetAddress addr = InetAddress.getByName("127.0.0.1")
int port = 5050
DatagramPacket sendPacket
= new DatagramPacket(sendBuf ,sendBuf.length , addr , port)
client.send(sendPacket)
byte[] recvBuf = new byte[100]
DatagramPacket recvPacket
= new DatagramPacket(recvBuf , recvBuf.length)
client.receive(recvPacket)
String recvStr = new String(recvPacket.getData() , 0 ,recvPacket.getLength())
System.out.println("收到:" + recvStr)
client.close()
}
}
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)