「java接收udp」java接收UDP超时报错机制
今天给各位分享java接收udp的知识,其中也会对java接收UDP超时报错机制进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java 中怎么使用UDP?
- 2、java udp发送和接收端口问题
- 3、java 实现 UDP连接的源程序
- 4、Java udp如何通过一个对象完成接收和发送数据
- 5、java 怎么用UDP实时接收数据?
- 6、java udp发送接受数据范例
java 中怎么使用UDP?
发送步骤:
使用 DatagramSocket(int port) 建立socket(套间字)服务。
将数据打包到DatagramPacket中去
通过socket服务发送 (send()方法)
关闭资源
import java.io.IOException;
import 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();//关闭资源
}
}
java udp发送和接收端口问题
你是在同一台电脑上测试吧,那肯定不行的,因为一个端口只能给一个程序使用,而你发送要用到1000端口,接收又要用到1000端口,所以肯定是冲突的,但是你用2台电脑测试就不会了。同样,你先建一个1000端口的server,你再建一个1000端口的server同样会报错。ps:你在开了tomcat的情况下,开一个8080的server试试,一样会报错,这是常识。
java 实现 UDP连接的源程序
import java.io.*;
import java.lang.*;
import java.net.*;
public class uclient
{
private DatagramSocket cli;
private DatagramPacket pac;
private byte sb[];
private String sen;
public uclient()
{
Init();
}
public void Init()
{
try
{
//指定端口号,避免与其他应用程序发生冲突
cli=new DatagramSocket(10002);
sb=new byte[1024];
sen="UDP方式发送数据";
sb=sen.getBytes();
pac=new DatagramPacket(sb,sb.length,InetAddress.getByName("localhost"),10005);
cli.send(pac);
}
catch(SocketException se)
{
se.printStackTrace();
}
catch(IOException ie)
{
ie.printStackTrace();
}
}
public static void main(String args[])
{
new uclient();
}
}
接收端数据:
//加以改进代码,可以改变接收方式
import java.io.*;
import java.lang.*;
import java.net.*;
public class userve
{
private DatagramSocket ser;
private DatagramPacket pac;
private byte rb[];
private String rev;
public userve()
{
Init();
}
public void Init()
{
try
{
ser=new DatagramSocket(10005);
rb=new byte[1024];
pac=new DatagramPacket(rb,rb.length);
rev="";
int i=0;
while(i==0)//无数据,则循环
{
ser.receive(pac);
i=pac.getLength();
//接收数据
if(i0)
{
//指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点
rev=new String(rb,0,pac.getLength());
System.out.println(rev);
i=0;//循环接收
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String args[])
{
new userve();
}
}
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();
}
}
java 怎么用UDP实时接收数据?
我自己写的代码:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class UdpRecvDemo
{
public static void main(String[] args) throws IOException
{
Recv();
}
public static void Recv() throws IOException
{
System.out.println("接受开始......");
DatagramSocket ds = new DatagramSocket(3388);
while(true)
{
byte[]buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
ds.receive(dp);
System.out.println(ds);
String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();
String text = new String(dp.getData(),0,dp.getLength());
if(text.equals("exit"))
{
System.out.println(ip+"退出会话......");
break;
}
System.out.println(ip+":"+port+"===me "+text);
}
ds.close();
}
}
java udp发送接受数据范例
您好,提问者:
如果这两个端口是一个机器的话,那就不能一样。
如果Server端是9000端口,发送端也是9000,会提示端口被占用异常的。
其实Client可以不用指定,直接new DatagramSocket();即可,会随机的。
java接收udp的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java接收UDP超时报错机制、java接收udp的信息别忘了在本站进行查找喔。
发布于:2022-11-21,除非注明,否则均为
原创文章,转载请注明出处。