精华内容
下载资源
问答
  • 我不太懂java是怎么进行处理的,因为一直收数据,我处理好之后要显示在界面上,要一直更新,我是收到一帧数据处理完之后,在接收,还是具体怎么接收的,要把之后的数据一直缓存吗?我要怎么写呢?
  • 通过j2se upd网络编程,发送报文。我这里只是客户端,修改数据库连接,主要是把数据库里面的图片(base64编码处理),拆成包,发送给服务端。
  • 解析报文的时候,报文描述中有两个字节的Unsigned short类型的字段,获取这两个字节的byte数组以后,应该怎么解析处理啊?这两个字节存储的内容为2020,但是按照网上的教程,...
  • 我正在尝试将以下数据发送到将使用C的服务器:static int user_id; // 4 Bytesstatic byte state; // 1 Bytestatic String cipher_data; // 128 Bytesstatic String hash; // 128 Bytesstatic final int PACKET_SIZE...

    我正在尝试将以下数据发送到将使用C的服务器:

    static int user_id; // 4 Bytes

    static byte state; // 1 Byte

    static String cipher_data; // 128 Bytes

    static String hash; // 128 Bytes

    static final int PACKET_SIZE = 261;

    public static byte [] packet = new byte [PACKET_SIZE];

    我正在尝试创建一个字节数组,其中将包括所有这些字节数组:

    ByteArrayOutputStream baos = new ByteArrayOutputStream(PACKET_SIZE);

    DataOutputStream dos = new DataOutputStream(baos);

    dos.write(state);

    dos.writeInt(user_id);

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

    dos.write((byte) cipher_data.charAt(i));

    }

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

    dos.write((byte) hash.charAt(i));

    }

    packet = baos.toByteArray();

    现在,我有了包含所有数据的字节数组,但是我不确定我在做什么,是否正确,以及是否可以从服务器端读取所有这些数据.如果您能给我一些建议,我将不胜感激,

    谢谢,

    解决方法:

    您需要关心的第一件事是源计算机和目标计算机的Endian-ness.

    C没关系,您需要确定在哪个计算机(硬件/ OS)上执行目标程序.

    之后,this SO线程将能够使您通过.

    展开全文
  • UDP的最大报文长度

    2021-03-15 12:46:00
    其中以太网(Ethernet)的数据帧在链路层IP包在网络层TCP或UDP包在传输层TCP或UDP中的数据(Data)在应用层它们的关系是数据帧{IP包{TCP或UDP包{Data}}}在应用程序中我们用到的Data的长度最大是多少,直接取决于...

    对于以太网环境下UDP传输中的数据包长度问题

    首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。

    其中以太网(Ethernet)的数据帧在链路层

    IP包在网络层

    TCP或UDP包在传输层

    TCP或UDP中的数据(Data)在应用层

    它们的关系是 数据帧{IP包{TCP或UDP包{Data}}}

    在应用程序中我们用到的Data的长度最大是多少,直接取决于底层的限制。

    我们从下到上分析一下:

    在链路层,由以太网的物理特性决定了数据帧的长度为(46+18)-(1500+18),其中的18是数据帧的头和尾,也就是说数据帧的内容最大为1500,即MTU(Maximum Transmission Unit)为1500;

    在网络层,因为IP包的首部要占用20字节,所以这的MTU为1500-20=1480;

    在传输层,对于UDP包的首部要占用8字节,所以这的MTU为1480-8=1472;

    所以,在应用层,你的Data最大长度为1472。

    (当我们的UDP包中的数据多于MTU(1472)时,发送方的IP层需要分片fragmentation进行传输,而在接收方IP层则需要进行数据报重组,由于UDP是不可靠的传输协议,如果分片丢失导致重组失败,将导致UDP数据包被丢弃)。

    从上面的分析来看,在普通的局域网环境下,UDP的数据最大为1472字节最好(避免分片重组)。

    但在网络编程中,Internet中的路由器可能有设置成不同的值(小于默认值),Internet上的标准MTU值为576,所以Internet的UDP编程时数据长度最好在576-20-8=548字节以内。

    MTU对我们的UDP编程很重要,那如何查看路由的MTU值呢?

    对于windows OS: ping -f -l  

    如:ping -f -l 1472 192.168.0.1

    如果提示:Packets needs to be fragmented but DF set.

    则表明MTU小于1500,不断改小data_length值,可以最终测算出gateway的MTU值;

    对于linux OS: ping -c  -M do -s  

    如: ping -c 1 -M do -s 1472 192.168.0.1

    如果提示 Frag needed and DF set……

    则表明MTU小于1500,可以再测以推算gateway的MTU。

    当然要修改MTU的值,那就是网管的事了(一般人没这权限呀),我们只能申请加等待了 ^-^

    展开全文
  • javaoop-udp协议的解析

    2016-05-09 21:36:21
     1.DatagramPacket表示存放数据数据报,  2. DatagramSocket表示接受或发送数据报的套接字  2.使用方法:  我们应该先建立套接字(即发送站或接收站),之后通过套接字发送或接受数据。  DatagramSocket(int...

    1.基本概念:

      1.DatagramPacket表示存放数据的数据报

          2. DatagramSocket表示接受或发送数据报的套接字


      DatagramSocket(int port):与上面不同的是,绑定到特定端口号,其它不变

      close(): 关闭套接字

      recevie(DatagramPacket dp):  接受数据报

      send(DatagramPacket dp): 发送数据报


    》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

      这里触及了数据报,下面介绍数据报:

      接受类型:


      DatagramPacket(byte[] buf, int length):

      用来接受长度为length的buf数据(即数据存于字节数组buf中)

     2. 发送类型:

    1.服务器端 接收之后 获取的 客户端的 端口与和 地址之后 就会用到 和 最开始 发送的 也会用到

      DatagramPacket(byte[] buf, int length, InetAddress address, int port);

      将length长的buf数据发送到指定的地址的端口号处


       将length长的buf数据发送到指定的套接字地址处

      有上面可知,我们发送数据时构造的数据报应该是发送类型的,而接受数据报时应该是接受类型的    

      》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

      1.一个接收方,一个发送方

      2.当接收方收到发送方发送的消息后,打印发送的消息及发送方的地址和端口号,之后向发送反馈一条信息“接受方:我收到了!”

      3.发送方打印出接收方反馈的消息

      详细思路见代码:

    public class MyudpServer {


    public static void main(String[] args) {
    try {
    DatagramSocket server=new DatagramSocket(6789);

    byte [] bys=new byte[1024];

    //创建接收消息的数据包
    DatagramPacket dpreceive=new DatagramPacket(bys,bys.length);
    //接收发送过来的消息
    server.receive(dpreceive);

    String msg=new String(dpreceive.getData(),0,dpreceive.getLength());
    System.out.println("接收到的消息是:"+msg);

    InetAddress addr =  dpreceive.getAddress();
    int port=dpreceive.getPort();


    msg="你好客户端,欢迎你!";
    //发送消息的数据包
    DatagramPacket dpsend = new DatagramPacket(msg.getBytes(),msg.getBytes().length,addr,port);
    server.send(dpsend);


    server.close();


    } catch (Exception e) {
    e.printStackTrace();
    }
    }


    }

    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    public class MyudpClient {


    public static void main(String[] args) {

    try {
    DatagramSocket client=new DatagramSocket();
    String msg="你好,服务器。。。。";


    DatagramPacket dpsend = new DatagramPacket(
    msg.getBytes(),msg.getBytes().length,
    InetAddress.getByName("127.0.0.1"),6789);

    client.send(dpsend);

    byte[] bys=new byte[1024];

    //创建接收消息的数据包
    DatagramPacket dpreceive=new DatagramPacket(bys,bys.length);
    //接收发送过来的消息
    client.receive(dpreceive);

    msg=new String(dpreceive.getData(),0,dpreceive.getLength());
    System.out.println("服务器说:"+msg);

    client.close();
    } catch (Exception e) {
    e.printStackTrace();
    }

    }


    }





    展开全文
  • 由于udp通信的不可靠性,经常丢包,所以大家以后用到的话,发送报文时,记得发三遍,三遍丢包情况就基本不会发生。 现在先上通信的接收代码 //定义一个端口号 int port = 10086; try { //创建接收方的套接字,...

    今天,废话不多说,直接上代码,保存起来,方便自己和同道中人参考

    由于udp通信的不可靠性,经常丢包,所以大家以后用到的话,发送报文时,记得发三遍,三遍丢包情况就基本不会发生。

    现在先上通信的接收代码

       //定义一个端口号
          int port = 10086;
          try {
            //创建接收方的套接字,监听端口号
            DatagramSocket getSocket = new DatagramSocket(port);
            while(true){
              //确定接收的数据报文的长度,来建立缓冲区
              byte[] buf = new byte[36];
              //创建接收类型的数据包,数据先储存在缓冲区
              DatagramPacket getPacket = new DatagramPacket(buf,buf.length);
              //通过套接字接收数据
              getSocket.receive(getPacket);
              //解析接收到到16机制数据
              byte[] bytes = getPacket.getData();
              String data = getBufHexStr(bytes);
              LOG.info("data:"+data);//接收成功后回复
              backHeadle(getSocket,getPacket);
            }
    
          } catch (SocketException e) {
            e.printStackTrace();
          } catch (IOException e) {
            e.printStackTrace();
          }
    将16进制的byte数组转换成字符串getBufHexStr方法的代码段: 
     //将16进制的byte数组转换成字符串
      public static String getBufHexStr(byte[] raw){
        String HEXES = "0123456789ABCDEF";
        if ( raw == null ) {
          return null;
        }
        final StringBuilder hex = new StringBuilder( 2 * raw.length );
        for ( final byte b : raw ) {
          hex.append(HEXES.charAt((b & 0xF0) >> 4))
            .append(HEXES.charAt((b & 0x0F)));
        }
        return hex.toString();
      }

    这里上发送的 代码段:

    //回复数据
      private static void backHeadle( DatagramSocket getSocket,DatagramPacket getPacket) {
        //通过数据包得到发送方的套接字ip
        SocketAddress sendAddress = getPacket.getSocketAddress();
        //确定要回复给发送方的消息内容,并转换成字符数组
        String feedback = "211502a0";
        //由于16进制字符发送时只能发送字节,这里讲字符串转换成字节
        byte bytes[] = getHexBytes(feedback);
        //创建发送类型的数据包
        DatagramPacket sendPacket = new DatagramPacket(bytes,bytes.length,sendAddress);
        //通过套接字发送数据
        try {
          getSocket.send(sendPacket);
          LOG.info("发送成功");
        } catch (IOException e) {
          LOG.info("发送失败");
          e.printStackTrace();
        }
      }

    将16进制的字符串转成字符数组 getHexBytes的方法

     //将16进制的字符串转成字符数组
      public static byte[] getHexBytes(String str){
        byte[] bytes = new byte[str.length() / 2];
        for(int i = 0; i < str.length() / 2; i++) {
          String subStr = str.substring(i * 2, i * 2 + 2);
          bytes[i] = (byte) Integer.parseInt(subStr, 16);
        }
        return bytes;
      }

    小M微信二维码 : 有问题可以加微信

    打赏二维码:觉得有用有帮助的可以给小M~打赏哦

    展开全文
  • Java中通过UDP协议发送和接受数据

    千次阅读 2018-06-13 14:36:15
    Java中通过UDP协议发送和接受数据UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!UDP适用于一次只传送少量数据、对可靠性...
  • 解析:首先是读取字节:/*** 读取输入流中指定字节的长度* * 输入流** @param length 指定长度* @return 指定长度的字节数组*/public static byte[] readBytesFromTo(byte[] buffer, int from, int length) {byte[] ...
  • 主要介绍了java抓包后对pcap文件解析示例,需要的朋友可以参考下
  • 基于netty 的udp字节数据接 收服务,发送服务实例 基于netty 的udp字节数据接收服务,发送服务实例
  • java基于UDP发送数据,先对文件进行读取,之后,再依据主机名称得到IP地址,用数据和地址创建数据报文包,创建数据报文套接字并且通过它传送,发送字符串。代码:importjava.io.*;importjava.net.*;...
  • 设计要求: 1)按照UDP协议数据包发送方式实现用户端之间的通信。 2)统计包的发送和接收数,计算数据包的丢失数。 3)设计美观易用的图形界面。
  • java 利用UDP协议 通信

    2021-03-08 19:29:13
    package udp;import java.net.* ;public class UdpTest{public static void main(String []args){if (args.length > 0)runServer();elserunClient() ;}static public void runServer() //服务器端{try{DatagramS....
  • UDP数据包解析解析UDP数据包

    热门讨论 2009-12-11 13:06:11
    UDP数据包解析解析UDP数据包,可以用C#实现UDP数据包的解析
  • UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种...正文今天学习了Java的网络编程,感觉UDP数据传输对于我这种初学者还是有点玩头的,自己就花了点时间写了一个简单的聊天程序和同学玩...
  • UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是...
  • udp数据包,完全分析

    2009-05-10 13:04:49
    这是udp数据包,用**捕获的,可以研究,一下对协议分析很有帮助,试试了
  • java-UDP协议接收和发送数据

    千次阅读 2019-02-19 15:10:00
    java-UDP协议接收和发送数据 UDP发送数据的步骤: A:创建发送端的Socket服务对象  B:创建数据,并把数据打包  C:通过Socket对象的发送功能发送数据包  D:释放资源 public class ...
  • 创建服务端用于监听端口 import ... ... import lombok.extern.slf4j.Slf4j; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import
  • UDP是面向无连接的通讯协议,由于通讯不需要连接,所以可以实现广播发送。UDP通讯时不需要接收方确认,属于不...UDP报文格式如下:UDP首部有8个字节,由4个字段构成,每个字段都是两个字节,源端口:数据发送方的...
  • 最近接收第三方发送的UDP数据包,通过wirshark抓包后使用其原始数据(16进制),在自己写的UDPclient/server测试成功,在生产环境中,出现了接收数据乱码的问题。 基于Spring Boot2.1.5.RELEASE,jdk 1.8开发 相关...
  • Java实现UDP通信

    2020-07-29 14:38:50
    UDP(User Datagram Protocol),即用户数据报协议,UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据报协议)。UDP在IP数据报的头部...
  • 本文中涉及很多的位运算,如果对位运算不太了解的请看我前面写的博客。 本文主要介绍TCP协议报文格式,及一些该协议的使用
  • 找了网上通用的UDP程序,当用字符串发送时如"1234567890",我这边接到显示的也有"1234567890",然而,当那边用16进制发时,我收到的是:"4vx3F"每两个字节为一组输出,且当数据中第一位...找了网上通用的UDP程序,当用...
  • Java读二进制报文、做报文分析软件.分析抓包中的各个字段的含义。packageshuju;importjava.io.*;importjava.lang.Integer;classshuju{publicstaticvoidmain(String[]args){StringfileName="D:\\报文1.bin";try{...
  • 需求:对接第三方的日志接口,用udp协议发送syslog日志核心代码:try {//指定本机端口 用这个端口接收 别人也是给这个端口发DatagramSocket socket = new DatagramSocket(514);while (true){//指定容量byte[] bytes ...
  • 在终端电脑上使用telnet程序,用它连接到服务器 三、Java中的HTTP通信 1、使用HTTP的Get方式读取网络数据 class ReadByGet extendsThread{ @Overridepublic voidrun(){ URL url= new URL("网址");//如果有参数,在...
  • TCP报文解析

    2019-04-21 10:30:00
    概述 在《网络基础总结(一)》总结了TCP建立连接和断开连接的流程...卷1: 协议》,这篇随笔就看下TCP的报文吧。 TCP报文 我们如何区分一台电脑上的不同应用进程?就像我们区分人一样,不同的人给标识不同的名...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,171
精华内容 4,468
关键字:

java解析udp报文数据

java 订阅