「java接收udp」java接收UDP超时报错机制

博主:adminadmin 2022-11-21 13:29:09 101

今天给各位分享java接收udp的知识,其中也会对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」java接收UDP超时报错机制

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的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-21,除非注明,否则均为首码项目网原创文章,转载请注明出处。