UDP给指定IP和端口传输数据包,为什么一直显示Network is unreachable: Datagram send failed

_ UDPClient.java

package com.bill.udp.client;
import java.io.IOException;

import java.io.RandomAccessFile;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.InetSocketAddress;

import com.bill.udp.util.UDPUtils;

public class UDPClient {

private static final String SEND_FILE_PATH = "D:/imgmap.jpg";

public static void main(String[] args){

    long startTime = System.currentTimeMillis();    

    byte[] buf = new byte[UDPUtils.BUFFER_SIZE];

    byte[] receiveBuf = new byte[1];

    RandomAccessFile accessFile = null;

    DatagramPacket dpk = null;

    DatagramSocket dsk = null;

    int readSize = -1;

    try {

        accessFile = new RandomAccessFile(SEND_FILE_PATH,"r");
        //构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。 
        dpk = new DatagramPacket(buf, buf.length,new InetSocketAddress(InetAddress.getByName("192.168.1.106"), 5000));
        //创建数据报套接字,将其绑定到指定的本地地址。
        dsk = new DatagramSocket(5001, InetAddress.getByName("192.168.1.106"));

        int sendCount = 0;

        while((readSize = accessFile.read(buf,0,buf.length)) != -1){

            dpk.setData(buf, 0, readSize);

            dsk.send(dpk);

            // wait server response 

            {

                while(true){

                    dpk.setData(receiveBuf, 0, receiveBuf.length);

                    dsk.receive(dpk);



                    // confirm server receive

                    if(!UDPUtils.isEqualsByteArray(UDPUtils.successData,receiveBuf,dpk.getLength())){

                        System.out.println("resend ...");

                        dpk.setData(buf, 0, readSize);

                        dsk.send(dpk);

                    }else

                        break;

                }

            }



            System.out.println("send count of "+(++sendCount)+"!");

        }

        // send exit wait server response

        while(true){

            System.out.println("client send exit message ....");

            dpk.setData(UDPUtils.exitData,0,UDPUtils.exitData.length);

            dsk.send(dpk);



            dpk.setData(receiveBuf,0,receiveBuf.length);

            dsk.receive(dpk);

            if(!UDPUtils.isEqualsByteArray(UDPUtils.exitData, receiveBuf, dpk.getLength())){

                System.out.println("client Resend exit message ....");

                dsk.send(dpk);

            }else

                break;

        }

    }catch (Exception e) {

        e.printStackTrace();

    } finally{

        try {

            if(accessFile != null)

                accessFile.close();

            if(dsk != null)

                dsk.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

    long endTime = System.currentTimeMillis();

    System.out.println("time:"+(endTime - startTime));

}

}
UDPUtils.java

package com.bill.udp.util;

public class UDPUtils {

private UDPUtils(){}

/** transfer file byte buffer **/
public static final int BUFFER_SIZE = 50 * 1024;
/** controller port  **/
public static final int PORT = 50000;
/** mark transfer success **/
public static final byte[] successData = "success data mark".getBytes();
/** mark transfer exit **/
public static final byte[] exitData = "exit data mark".getBytes(); 

public static void main(String[] args) {

    byte[] b = new byte[]{1};

    System.out.println(isEqualsByteArray(successData,b));

}
public static boolean isEqualsByteArray(byte[] compareBuf,byte[] buf){

    if (buf == null || buf.length == 0)

        return false;   

    boolean flag = true;

    if(buf.length == compareBuf.length){

        for (int i = 0; i < buf.length; i++) {

            if(buf[i] != compareBuf[i]){

                flag = false;

                break;

            }

        }

    }else

        return false;

    return flag;

}

public static boolean isEqualsByteArray(byte[] compareBuf,byte[] buf,int len){

    if (buf == null || buf.length == 0 || buf.length < len || compareBuf.length < len)

        return false;

    boolean flag = true;

    int innerMinLen = Math.min(compareBuf.length, len);

        for (int i = 0; i < innerMinLen; i++) {  

            if(buf[i] != compareBuf[i]){

                flag = false;

                break;

            }

        }

    return flag;

}

}

0

2个回答

网络不通,或者防火墙拦截了。你两个计算机要在一个网段,各自关闭防火墙,然后双方ping对方,能ping到,再运行你的程序看看。

1
Mookies
Mookies 可以说的更细一点吗?我刚学这个还是不太懂,我是通过localhost到我的IP地址的通讯,之后按照你这个关闭了防火墙,并且ping了localhost和我的IP地址,还是出现同样的问题,帮帮我,拜托!
9 个月之前 回复

确实是网段的问题,两台计算机必须在同一网段,不可以其中一个是你的IP,另一个是localhost

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
QT入门 udp发送
int main(int argc, char *argv[]) { QApplication a(argc, argv); DemoDialog dlg; dlg.show(); return a.exec(); } 在DemoDialog.h中定义UDP发送变量 //UDP发送变量 QUdpSocke
Java中利用DatagramPacket与DatagramSocket进行通讯的示例
对以下demo进行了扩展,增了消息循环和等待。 Java中的DatagramPacket与DatagramSocket的初步扩展的代码如下:1.接收端工程代码:由于接收端的控制台log会被发送端的log冲掉,所以把log写到文件中。package com.ameyume.receiver; import java.io.File; import java.io.FileNotFoundExcep
史上最详细的linux关于connect: network is unreachable 问题的解决方案
1、虚拟机常用连接网络方式有两种:桥接和NAT。 使用桥接模式:则保证虚拟机的网段与物理机的网段保持一致。如下: 虚拟机网卡配置: 物理机使用WiFi接入网络(我用的是WiFi,你们可能用的是有线道理相同,保证网段一致即可): 【使用NAT模式连接道理与桥接的相似,只不过NAT模式需要保证虚拟机网段与VMnet 8一致!!!】 使用桥接模式,配置网卡之前做如下工作: 选...
sendip工具发送大的tcp和udp包时,遇到message too big问题
在跑job的时候,将DUT的盒子的X1口的MTU设置为了1000,然后从PC1发送大于1000的包,第一次可以发送成功,第二次就会报message too big的错误。 这是因为在第一次发送时,PC1会根据整个链路过程中的最小的MTU来调整MTU值,第一次发送后,会将MTU的值调整为1000,所以第二次发送大于1000的包时,就会报message too big的错误。 此时可以再将X1的M
udp给所有IP指定端口发送数据配置
new DatagramPacket(buf, buf.length,InetAddress.getByName(&quot;192.168.21.105&quot;),10000);
wireshark学习——8.tcp和udp协议
步骤2:了解TCP端口 TCP的全称是Transmission Control Protocol,即传输控制协议。它在RFC 793中被定义。所有TCP通信都会使用源端口和目的端口,这些信息可以在每个TCP数据包的头部找到。而为了能够将数据传输到远程服务器或设备的特定应用中去,TCP数据包必须知道远程服务所监听的端口。如果想要尝试连接一个不同于所设置的端口,那么这个通信就会失败。一般来说,TCP...
python: tcp/ip学习、端口号、UDP的发送和接受数据、绑定端口号、模拟聊天室
1、 在进程中为每个系统定义了一个数字,就是端口,知道数据发送到那个程序中;ip决定发送到哪个电脑。因为不同的电脑程序所在的进程号不同,不能通过进程号来发送。 通过端口进入程序所在的进程。 2、端口号的数值0-65535 3、知名端口号0~1023和动态端口号  80端口网站:HTTP ipv4: 4、ip地址:在网络上标定一个电脑,地址: 网络地址和主机地址(即网络号和主机号),网
Sento 发送数据 成功,但是通过Wirshark抓包 ,不能抓到指定数据包
今天一个问题困扰了一整天, 现象: 在局域网下UDP收发数据都很正常,但是到了公网下,服务端可以收到数据,但是发送数据出现问题, 通过返回发送的字节数目是正常的,WSAGetLastError()返回的也是正确。 但是当通过Wirshark抓包时,无法抓到Server端发出去的数据包。 解决办法:确保数据是原路返回 1. 当Server端收到一个UDP数据包之后,Server端应该记录...
vmware安装linux后没有ip,ping 本地 ip地址出现错误:Network is unreachable
   今天用vmware安装了个linux系统,按照视频想用本地shell连接下,但是一直找不到ip,ping本地ping不同,提示Network is unreachable。用ifconfig也没有找到ip地址。     改成桥接方式也不行,重启network服务也不行,后来查了下需要改下配置文件,我本地的路径是/etc/sysconfig/network-scripts/,文件名是ifcf...
DatagramSocket发送和接受文件
在大部分的教程中,在学习UDP时,都是发送字符串,且接收端也只接受一次,本人在心血来潮的情况下想摸索下如何使用UDP发送文件,现在将代码共享给大家,希望大家不吝赐教! 发送端代码: public class SendDemo { /** * @param args * @throws IOException */ public static void main(St
[代码笔记] python 之网络编程: 使用udp 发送音频文件
使用udp发送一个可执行的jar文件服务端:#!python #文件名: demo_server.py ''' 规定: 服务器接受客户端请求,得知要发送文件了(实际就得知该发送哪个) 向其发送文件,然后不停的发送(大文件分段发送),此处我还要接受客户端的接受成功消息 ''' import socketBUF_SIZE = 1024 server_addr = ('127.0.
DatagramSocket发送、接收数据(Socket之UDP)
https://blog.csdn.net/jiangxinyu/article/details/8161044 import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress;
关于自己遇到的nfs 挂载问题:
情况一:在板子上进行如下操作: 设置开发板的IP与我Ubuntu下的IP为同一网段。 ifconfig eth0 192.168.1.15    之后挂载试试   mount -t nfs -o nolock 192.168.1.19:/home/ema/nfs_share /tmp/ 出现:mount: RPC: Unable to receive; errno = No route
Centos7网络连接不上:Network is unreachable 解决方案
        有朋友的centos7装在虚拟机上挂起后在打开不能正常连接网络,我的也出现了这个问题,试着用dhclient重新分配一下地址,无奈系统提示dhclient正在运行,没办法只能试试其它办法,之后研究了一下,大家可以参考这个方案,亲试有效, 步骤如下:一、cd /etc/sysconfig/network-scripts/  进入要修改网络相关的配置文件目录二、 ls查看一下目录这时候...
同一端口监听TCP与UDP数据包
展示了关于udp与tcp在同一端口下的监听实现。
linux 下udp 发送数据包程序
linux下的udp 发包函数源码,可以指定发送的IP与端口号,适合socket 编程初学者学习
向指定ip端口发送数据并等待接收
像指定的IP和端口发送数据,发送完后并等待数据返回。
UDP 服务端与客户端均可以bind()绑定端口, 并且可以使用connect()链接后,使用send()与recv()方法!
测试发现: UDP 服务端与客户端均可以bind()绑定端口,一般使用recvfrom()与sendto() , 但使用connect()链接后,也可以使用send()与recv()方法! UDP服务端 #include #include #include #pragma comment(lib, "Ws2_32.lib") int main() { WSADATA wsaDat
当出现『SIOCADDRT: Network is unreachable』 这个错误时,肯定是由于 gw 后面接的 IP 无法直接与您的网域沟通 (Gateway 并不在你的网域内), 所以,赶紧检
当出现『SIOCADDRT: Network is unreachable』 这个错误时,肯定是由于 gw 后面接的 IP 无法直接与您的网域沟通 (Gateway 并不在你的网域内), 所以,赶紧检查一下是否输入错误啊!加油吧! 补脑链接: http://vbird.dic.ksu.edu.tw/linux_server/0140networkcommand/0140networkcomma
udp请求,指定本地端口,用java写client,用c++写server
这个例子的作用:发送一个udp请求,服务器端返回这个客户端对外(公网)的ip和port 特点: 1、指定本地udp的端口,这样做的效果是短时间内udp对外的port就不会改变 2、服务器端是用c++写的,难点是怎样发送和读c++返回的内容 服务器约定返回8个字节,前4个字节是ip,后4个字节是端口 public NetInfo aUdpClient(String tag,int port...
端口和UDP数据包发送 监视器
这是一个简单好用的小软件,可以用来监控你的电脑的TCP端口和UDP数据包发送情况 界面采用列表方式可以一目了然的看到你的机器的端口情况,他的列表分类清晰如协议,PID,进程名称,本地地址,本地端口,远程地址,远程端口,连接状态等等
利用iptables修改UDP报文源IP地址的方法
1. 问题起因: 最近在一个项目中,有一个模块是基于UDP的服务端,为了保证系统的高可用性,方案中采用了KeepAlive做主备切换,拓扑模型如下: 客户端访问系统的入口地址是VIP,此时VIP落在UDP Server主上,也就是说,此时实际上UDP Server主有两个IP,一个是自己的实际IP地址,即IP1,另一个是VIP。理想情况下,系统是通过VIP接受了UD
服务端和客户端连接的两种方式,socket和DatagramSocket
socket有两种方式, 一种是Serversocket(服务端)和socket(客户端)的方式(基于tcp/ip的通信方式) 另一种是DatagramSocket(客户端和服务端)的方式(基于udp的通信方式) 第一种服务端需要绑定端口和ip,客户端监听服务端时需要知道服务端的端口和ip(可以不用绑定客户端的端口和ip,系统会自动分配端口给客户端),这种方式适合传输大型文件(几个G的游戏文
golang udp 指定本地地址和端口
指定本地地址为127.0.0.1 端口7770 localip := net.ParseIP(&quot;127.0.0.1&quot;) remoteip := net.ParseIP(&quot;127.0.0.1&quot;) lAddr := &amp;amp;net.UDPAddr{IP: localip, Port: 7770} rAddr := &amp;amp;net.UDPAddr{IP: remot...
三十九、Udp网络1:使用socket 发送、接收数据,绑定端口和中文编码解码问题
一、初识Udp网络发送数据 (1)前提:必须要保证他们在同一个局域网中,要在一个网段才行         NetAssist.ext软件是用来协助我们完成网络请求:         网络设置:填写的是自己电脑上的IP地址。         目标主机和目标端口:填写的是你要给谁发送的那个人的ip地址和端口号。         发送的内容:在那个大白框中进行填写。     1、网络调试助手...
libpcap的简单使用--抓取特定类型和端口的网络数据
libpcap的简单使用--抓取特定类型和端口的网络数据
虚拟机连不上网,ping时报错,connect network is unreachable
最近安装了虚拟机一直连不上网,不知道哪个步奏突然好了,我就把我的解决过程整理下: 1.首先 etc/sysconfig/network-scripts/ifcfg-eth0 看是否缺少 ifcfg-eth0 ,缺少的话,就添加上,命令: vim etc/sysconfig/network-scripts/ifcfg-eth0 最后 reboot,重启电脑. 2.然后编辑 - 虚拟网络编辑器
单机搭建Android(解决Network is unreachable)
单机搭建Android(解决 fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle fatal: error [Errno 101] Network is unreachable ),具体操作请阅readme.txt
UDP传输时IP层的分片是怎么回事? UDP传输时为什么不要用tcpdump过滤端口来抓包?
先来看程序, 服务端: #include #include #include #include #include #include #include int main() { struct sockaddr_in srvAddr; bzero(&srvAddr,sizeof(srvAddr)); srvAddr.sin_family = AF_INET;
网络编程之 DatagramSocket 类与 DatagramPacket 类(客户端收发消息)
DatagramSocket 和 DatagramPacket 两个类是 基于UDP 协议进行通信的包装类 实现两个客户端通过 UDP协议通信,使用DatagramSocket 和 DatagramPacket类 有如下几个步骤,分为客户端和服务端 1,客户端: 1),实例化DatagramSocket类(带上指定端口),创建客户端 2),准备数据,数据是以字节数组发送的 3),打包数...
ffmpeg udp推流指定网口
有时设备有多网口,而ffmpeg3.2没有指定网口的方法,因此有了以下几种解决方法:1 自定义AVIO 2 修改AVIO文件描述符属性 3 修改ffmpeg源码
cnetos7j静态网络配置及克隆导致网络不可访问问题
cnetos7网络配置及克隆导致网络不可访问问题 标签(空格分隔): linux 配置静态ip 以下为我本身的虚拟机静态配置,虚拟机静态地址配置 首先一个静态配置:在/etc/sysconfig/network-scripts 之下 可通过ifconfig获取该网卡对应的名称再找对应的文件 BOOTPROTO=static #是否配置静态的 这里当然是 DEFROUTE=yes P...
Linux yum报错以及虚拟机网络配置
今天在使用yum安装软件的时候出现问题: 第一次报错: “Couldn’t resolve host ‘centos.ustc.edu.cn’” 网上查是因为DNS的配置有问题,于是在 /etc/sysconfig/network-scripts/ifcfg-eth0 加入了两行配置 DNS1=8.8.8.8 DNS2=8.8.4.4 然后重启网络: service network
vc实现向指定ip端口发送数据或文件,获取本机ip
使用对话框实现向指定的ip和端口发送文件,发送数据,获取本机ip,多线程操作
C# 中UDP通信时 发送数据并需要事先Bind IP地址
C#中进行UDP通信时,在发送数据的时候,如果不事先Bind一个IP地址,就会随机分配一个地址进行发送数据。发送端class Program { static Socket client; static void Main(string[] args) { client = new Socket(AddressFamil
Jenkins Centos部署过程中异常No route to host问题解决
Jenkins在centos6.9(Final)下遇到如题所示没法路由主机问题,此问题是在部署阶段报出。注:此问题与镜像的核心系统是centos还是ubuntu无关,两种镜像都拉取测试过都是此问题。我用Oracle VirtualBox通过Boot2Docker.iso实现的时候直接用的宿主IP 这里在centos直接自己安装的docker,所以出现差异导致找不到主机路由。
Java实现最简单的本机UDP协议发送接收数据
发送数据思路:1.创建Socket对象2.将待发送数据打包3.通过Socket对象方法经由端口发送数据包4.释放资源接收数据思路:1.创建对应发送端口的Socket对象2.创建容器作为数据包的接收对象3.通过Socket对象方法接收数据包4.释放资源构造方法:DatagramSocket() //构造数据报套接字并将其绑定到本地主机上任何可用的端口。 DatagramSocket(i...
TCP报文段、UDP数据报、IP数据报区别
(1)TCP报文段(TCP segment) TCP传输给IP的数据单元称作TCP报文段。 segment : part of sth separated or marked off from the other parts. (数学解释:它是一个全集O的一个子集a) TCP报文段:TCP协议是面向有连接的协议,“有连接”的意思是TCP协议需要维护后续数据的状态信息,例
Android UDP 监听数据包
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
TCP和UDP协议发送数据包的大小
        在进行UDP编程的时候,因此发送多少bytes比较好呢??当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的。         以太网数据帧长度必须在46-1500字节之间,这是由以太网的屋里特性决定的。这个1500字节被称为链路层的MTU,但这并不是指链路层的长度被限制再1500字节,其实这个MTU指的是链路层的数据区,并不包括链路层的首部和尾部的18...