精华内容
参与话题
问答
  • TCP与UDP传输数据量问题

    千次阅读 2015-06-25 21:19:38
    TCP和UDP分别测试了发送数据大小

    TCP和UDP的原理就不用说了。

    TCP:客户端和服务器有一个连接的过程。在发送数据时最多能发送65535个字节,虽然可靠,但是发送的数据被protocol内部分成了几块,分片发送,所以在用TCP传输的时候,在协议制定上要考虑发送数据连续接收,才能保证一个协议帧的数据正确接收。

    UDP:客户端和服务器不需要连接过程。在发送数据时最多能发送65507个字节,UDP容易丢帧,但是发送的65507个字节不会被内部分片,可以整块发送,所以在制定协议时不用TCP那么复杂,发送和接收都很容易实现。工程应用中比较受欢迎。

    展开全文
  • UDP传输数据包的大小

    千次阅读 2018-08-02 15:48:46
    之前面试被问了,后来查了一下,但是太详细,有时也不好。 1500字节被称为链路层的MTU(最大传输单元).1500-20-8=1472 在普通的局域网环境下...UDP 包的大小就应该是 1492 - IP头(20) - UDP头(8) = 1464(BYTES) TC...

    之前面试被问了,后来查了一下,但是太详细,有时也不好。

    1500字节被称为链路层的MTU(最大传输单元).1500-20-8=1472

    在普通的局域网环境下,我建议将UDP的数据控制在1472字节以下为好

    还有地方说还应该有个PPP的包头包尾的开销(8Bytes),那就为1492了

    UDP 包的大小就应该是 1492 - IP头(20) - UDP头(8) = 1464(BYTES)
    TCP 包的大小就应该是 1492 - IP头(20) - TCP头(20) = 1452(BYTES)

    鉴于Internet上的标准MTU值为576字节,所以我建议在进行Internet的UDP编程时.最好将UDP的数据长度控件在548字节(576-8-20)以内.(8为UDP头。20为IP头)

    展开全文
  • UDP一次最多能传输数据大小 : 2^16-1 - 8 = 65507字节(-8是因为udp头部本身占用8个字节)

    b

    UDP一次最多能传输的数据大小 : 2^16-1 - 8 = 65507字节(-8是因为udp头部本身占用8个字节)

    展开全文
  • 1. 网络编程三要素  A:IP地址:InetAddress: 网络中设备的标识,不易记忆,可用主机名 B:端口号: 用于标识进程的逻辑地址,不同进程的标识 C:传输协议: ...每个数据报的大小在限制在64k; 因无连

    1.

    网络编程三要素

            A:IP地址:InetAddress: 网络中设备的标识,不易记忆,可用主机名
    B:端口号: 用于标识进程的逻辑地址,不同进程的标识
    C:传输协议: 通讯的规则常见协议:TCP,UDP
    UDP和Tcp的区别
                    UDP
    将数据源和目的封装成数据包中,不需要建立连接;
    每个数据报的大小在限制在64k;
    因无连接,是不可靠协议;
    不需要建立连接,速度快
    TCP
    建立连接,形成传输数据的通道;(io流)
    在连接中进行大数据量传输;
    需要连接所以是可靠协议;
    必须建立连接,效率会稍低
    UDP协议发送数据

    客户端(发送):       

                    a: 创建UDP通讯客户端对象(DatagramSocket)

      b: 创建数据报包 public DatagramPacket(byte[] buf, int length,InetAddress address,int port)
      c: 发送 数据
      d: 释放资源
    public class KeHuDuan {
    	public static void main(String[] args) throws IOException {
    		//创建客户端对象
                    DatagramSocket ds = new DatagramSocket();
    		
    		byte by[] = "你好".getBytes();
    		int  len = by.length;
    		InetAddress address = InetAddress.getByName("192.168.0.25");
    		//创建数据报包
    		DatagramPacket dp = new DatagramPacket(by, len, address, 9999);
    		//发送数据
    		ds.send(dp);
    		ds.close();
    	}
    }


    UDP协议接收数据
    服务端:
                    a: 创建UDP通讯协议服务器端对象(DatagramSocket) 注意要用有参数构造 指定端口号
      b: 创建数据报包,作用用来接收数据  // public DatagramPacket(byte[] buf, int length)
    c: 接收数据  receive(dp) ;
      d: 解析数据报包,拿出数据  dp.getData() ;  dp.getLength() ;

      e: 释放资源


    public class FuWuDuan {
    	public static void main(String[] args) throws IOException {
    		//创建服务器对象
                	DatagramSocket ds = new DatagramSocket(9999);
    		
    		byte by[] = new byte[1024];
    		int length = by.length;
    		// 创建数据报包,作用用来接收数据
    		DatagramPacket dp = new DatagramPacket(by, length);
    		
    		ds.receive(dp);//接受数据
    		
    		//解析数据报包  因为在客户端时,已将将数据包装好了,所以需要解析
    		byte[] data = dp.getData();
    		int length2 = dp.getLength();
    		
    		
    		//获取IP地址
    		InetAddress inetAddress = dp.getAddress();//获取IP地址对象
    		String ip = inetAddress.getHostAddress();//返回IP地址字符串
    		
    		System.out.println(ip+new String(data, 0, length2));	
    	}
    }


    例子2:客户端键盘循环输入,服务端显示


    客户端程序
    public class KeKuDuan {
    	public static void main(String[] args) throws IOException {
    		DatagramSocket ds = new DatagramSocket();// 客户端对象
    
    		InetAddress address = InetAddress.getByName("192.168.0.25");
    		//键盘录入
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		System.out.println("请输入汉字");
    		String lin = null;
    		while ((lin = br.readLine()) != null) {
    			System.out.println("请输入汉字");
    			byte[] buf = lin.getBytes();
    			int length = buf.length;
    			//数据包对象
    			DatagramPacket dp = new DatagramPacket(buf, length, address, 7777);
                
    			ds.send(dp);
    		}
    		ds.close();
    	}
    }
    服务端程序

    public class FuWuDuan {
    	public static void main(String[] args) throws IOException {
    		DatagramSocket ds = new DatagramSocket(7777);// 创建服务端对象
    
    		while (true) {
    			byte[] buf = new byte[1024];
    			int length = buf.length;
    			//创建数据报包 用来接收数据
    			DatagramPacket dp = new DatagramPacket(buf, length);
    
    			ds.receive(dp);
    
    			// 解析数据包
    			byte[] data = dp.getData();
    			int length2 = dp.getLength();
    			System.out.println(new String(data, 0, length2));
    		}
    	}
    }


    TCP:例子1.客户端将数据发送给服务端
    TCP协议发送数据

      a: 创建TCP通讯协议客户端对象(Socket)   // public Socket(String host, int port)
      b: 获取输出流对象(要将数据写进管道中)
      c: 写数据
      d: 释放资源
    客户端程序
    public class KeHuDuan {
    	public static void main(String[] args) throws IOException{
    		//创建客户端对象
    		Socket sk = new Socket("192.168.0.25", 5555);
    		
    		//获取输出流对象(要将数据写进输出管道中)
    	   	OutputStream out = sk.getOutputStream();
    	    	out.write("你好".getBytes());
    		
    		sk.close();
    		
    	}
    
    }
    TCP协议接收数据
    a: 创建TCP通讯协议服务器端对象(ServerSocket)
      b: 监听客户端
      c: 获取输入流对象(要将数据从管道中读出来)
      d: 读取数据
      e: 释放资源


    服务端程序
    public class FuWuDuan {
    	public static void main(String[] args) throws IOException {
    		//创建服务端对象
    		ServerSocket ss = new ServerSocket(5555);
    		//监听客户端(卡在这块进行监听)
    		Socket sk = ss.accept();
    		
    		InputStream in = sk.getInputStream();
    		
    		//每一个字节读取
    		byte by[] = new byte[1024];
    		int length = in.read(by);
    		
    		System.out.println(new String(by, 0, length));
    	}
    }

    例子2
    客户端循环输入,服务器端把客户端的数据保存在文件中


    客户端程序:
    public class KeHuDuan {
    	public static void main(String[] args) throws IOException {
    		Socket sk = new Socket("192.168.0.25", 8888);
    		
    		//键盘录入
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
    
    		//获取输出管道(将数据写进管道中)
    		OutputStream out = sk.getOutputStream();//(这相当于管道)
    		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));//写进管道
    		String lin = null;
    		System.out.println("请输入");
    		while((lin = br.readLine())!= null){
    			System.out.println("请输入");
    			bw.write(lin);
    			bw.newLine();
    			bw.flush();
    		}
    	}
    }
    服务器端程序:


    public class FuWuDuan {
    	public static void main(String[] args) throws IOException {
    		ServerSocket ss  = new ServerSocket(8888);
    		System.out.println("等待连接中");
    		Socket sk = ss.accept();//监听
    		System.out.println("已连接上");
    		
    		//获取输入管道(把数据从管道中读出来)
    		InputStream in = sk.getInputStream();
    		BufferedReader br = new BufferedReader(new InputStreamReader(in));
    
    
    		//将读取到的数据写进文件中
    		BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
    		String lin = null;
    		while((lin = br.readLine())!=null){
    		bw.write(lin);
    		bw.newLine();
    		bw.flush();
    		}
    		sk.close();
    	}
    }

















    展开全文
  • socket实现UDP数据传输

    2017-01-01 20:14:30
    UDP: User Datagram Protocol的简称, 中文名是用户数据包协议,是 OSI ...UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。 UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次
  • ---------------------- android培训、java培训、期待与您交流...Udp传输数据大小有要求超过64k就要分成块来分别传送。 1、首次必须建立一个发送端和一个 接受端 代码如下: 发送端: 通过new一个DatagramSock
  • TCP协议和UDP协议数据传输

    千次阅读 2013-10-16 15:16:43
    UDP协议当整个报文段到达时候,如果没有出现乱序,丢包,就会对报文进行重组,成为一个DatagramPacket(应用层角度来看的包大小),...来接收这个UDP数据包,否则会造成数据丢失,分为以下2种情况: 1:buffer size >=
  • 关于TCP/UDP数据传输过程

    千次阅读 2014-02-25 11:44:38
    关于TCP输出:  每个TCP套接口有一个发送缓冲区,当应用程序调用write时,内核将应用程序的缓冲区的数据拷贝到TCP的发送缓冲区,(如果write成功返回,仅仅表示应用程序的缓冲区... size)大小或者更小发送数据块给IP
  • 关于TCP输出:  每个TCP套接口有一个发送缓冲区,当应用程序调用write时,内核将应用程序的缓冲区的数据拷贝到...并不表示TCP的数据已经成功发送)TCP以对方MSS(maximum segment size)大小或者更小发送数据块给IP,并
  • Android-->UDP协议的Socket数据传输

    千次阅读 2016-03-22 14:49:15
    UDP数据传输时,数据包的大小是有限制的65535, 大概是64k的内容当数据太大时,需要分包机制,后续补充…如果你有更好的分包方法,请分享给我~谢谢!接收端的代码:public class UdpServerThread2 extends Thread { public ...
  • 1. 使用union判断cpu大小端 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    因为Linux与Windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失,使系统处于不稳定的状态,甚至在有的系统中会损坏硬件设备(硬盘)。在系统关机前使用 shutdown命令,系统管理员会通知所有...
  • 在网络中传输数据,数据包的大小依赖于链路层和物理层的传输能力,一般传输数据的过程是TCP或者UDP封装数据在数据的头尾加上TCP/UDP头部,之后到达IP网络层,同样在数据的头部加上IP头部,继续链路层对数据加上帧...
  • Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、...
  • ping ip(或域名) 向对方主机发送默认大小为32字节的数据,参数:“-l[空格]数据包大小”;“-n发送数据次数”;“-t”指一直ping。 ping -t -l 65550 ip 死亡之ping(发送大于64K的文件并一直ping就成了死亡之...
  • 最近在做iOS上,基于UDP传输音视频时遇到的一个问题,这边纪录一下: 由于考虑实时性比较高,所以采用了CocoaAsyncSocket 的UDP框架来实现,将视频切割成一帧帧的图片发给服务端,不过,在发送图片的过程中,发现:...
  • UDP传输视频文件,VC发送数据到安卓端,安卓端监听端口接收数据,采用网线直连,排除网络原因造成的丢包。当VC发送数据延时50ms(大概几百K每秒的速度发包),JAVA端能正确接收。可是不延时50ms发送时(大概2M/S的...
  • UDP传输数据特点 只需要一个目的地,然后将数据一直发送就行了。类似发快递1.将数据及源和目的封装成数据包中,不需要建立连接 2.每个数据报的大小在限制在64k内 3.因无连接,是不可靠协议 4.不需要建立连接,速度...
  • C++实现通过UDP传输文件

    千次阅读 2019-05-13 23:16:41
    1.本程序通过 UDP传输文件及其管理元数据(文件名、大小和日期等),包括client.cpp和server.cpp,分别是客户端程序和服务端程序。 2.文件以二进制形式传输。 3.由客户端指定文件目录,将文件传送到服务端,除了...
  • 1. 分析UDP丢包的原因: 1)现象是每隔一个包丢失一个,所以考虑是否是缓冲区的问题 答:用不同数据包大小10、100、500、1500发现都是收一个丢一个,说明缓冲区大小并不是直接因素。因为如果缓冲区大小有影响,那...
  • UDP传输协议  1、特点: 将数据及源和目的封装成数据包中,不需要建立连接,速度快,每个数据包的大小限制在64k内,不可靠的协议  2、需求:定义一个应用程序,用于接受udp协议传输的数据并处理。  思路:  ...
  • 黑马程序员---UDP传输

    2014-02-23 10:13:13
    ---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------   UDP  将数据及源和目的封装成数据包中,不需要建立连接  每个数据报的大小限制在...步话器(对讲机)就是UDP传输
  • UDP安全传输(完整源码) 大家都知道UDP比TCP好用发送速度快很多,程序写起来也简单的多,可缺点也同样明显UDP容易丢包,而且不能自动重发也不能自动组包没有数据安全机制,发的包不能超过2K(INDY,NMUDP等控件都...

空空如也

1 2 3 4 5 ... 20
收藏数 812
精华内容 324
关键字:

udp传输数据大小