
Java udp如何通过一个对象完成接收和发送数据
展开全部
//注意,本地ip以及端口,广播Ip以及端口,可根据自己的电脑实际情况定.我的三段是2
//思路:我用的udp启动服务端,进行侦听,如果有消息,就该频段广播一次..
//客户端使用多线程,一个发送服务端,一个接受广播..就当我复习了一次...!
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.Scanner;
public class UdpTest {
class SendTest{
private int count=1;
private Scanner sc;
private byte[] by,by2;
private InetAddress ip;
private SocketAddress sd1,sd2;
private DatagramSocket ds,ds2;
private DatagramPacket dp,dp2;
SendTest(String ipName,int port) throws Exception{
sc=new Scanner(System.in);
ip=InetAddress.getByName(ipName);
sd1=new InetSocketAddress(ip,port);//发送的目标:ip+端口
sd2=new InetSocketAddress(19823);//己方,省略ip,默认自己本地地址
ds=new DatagramSocket();//参数为自己的标识
//接受
by2=new byte[1024];
ds2=new DatagramSocket(sd2);
send();
}
private void send() throws IOException {
new Thread() {
public void run() {
while(true) {
by=sc.nextLine().getBytes();
dp=new DatagramPacket(by,by.length,sd1);//数组,数组长度,目标ip+端口
try {
ds.send(dp);
} catch (IOException e) {
e.printStackTrace();
}//推送服务;
System.out.println("老马第:"+count+++"条信息发送完成!");
}
}
}.start();
new Thread() {
public void run() {
while(true) {
dp2=new DatagramPacket(by2,by2.length);
try {
ds2.receive(dp2);
System.out.println("老马接受到一条广播可能来自老宋:"+new String(by2,0,dp2.getLength()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
}
}
class AccepTest{
private byte[] by;
private SocketAddress sd1,sd2;
private DatagramSocket ds;
private DatagramPacket dp;
private int count=0;
AccepTest() throws Exception{
by=new byte[1024];
sd1=new InetSocketAddress("192.168.2.255",19823);//广播
sd2=new InetSocketAddress(19822);//己方,省略ip,默认自己本地地址
ds=new DatagramSocket(sd2);//参数为自己的标识,这是用来接受的.....
accepts();
}
private void accepts() throws IOException {
while(true) {
count++;
System.out.println("老宋的服务器接受第:"+count+"次数据:...");
dp=new DatagramPacket(by,by.length);//数组,数组长度,仅仅用来接收;
ds.receive(dp); //接受服务;
String str=new String(by,0,dp.getLength());
System.out.println("老宋接受到数据--------->"+str);
System.out.println();
//广播..
by=("插个广播:"+str+"....谁发的??").getBytes();
dp=new DatagramPacket(by,by.length,sd1);
ds.send(dp);
}
}
}
public static void main(String[] args) throws Exception {
new Thread() {
public void run() {
try {
new UdpTest().new AccepTest();
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
new Thread() {
public void run() {
try {
new UdpTest().new SendTest("127.0.0.1",19822);
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询