有关读取UDP 数据包 不定长度的问题。

问题描述

大家好,我用php开启了一个UDPserver 客户端向服务器发送数据。收到后返回一个小信息。给大家看看基本的代码$pkt = stream_socket_recvfrom($socket, 100, 0, $peer);$reciv_data = fread($socket, 100);$message = preg_replace("/[[:space:]]/", '', $reciv_data); // cleanup data$response = "hello, $message";stream_socket_sendto($socket, $response, 0, $peer);echo " In > [$message] n";echo " Out > [$response] n";fread 我设置的长度是100,我出现这样一个问题,客户端必须发满了100个字符才能读取完并返回。如果一次没有够的话,得再发一个包才行。客户端代码$fp = stream_socket_client("udp://10.193.250.241:7777", $errno, $errstr);if (!$fp) { die("ERROR: $errno - $errstr<br />");} $request = "my name";stream_socket_sendto($fp, $request . "n", 0);stream_socket_sendto($fp, $request . "n", 0);这样我内容才能读完。似乎也不够100字符。总之,我就是想问一下怎么样读取一个不知道长度的udp包的内容呢。我想其他语言里的方法也差不多吧。谢谢了!

解决方案

这个偶也不是很清楚,我觉得你可以指定缓冲区大小的吧:)

时间: 2025-01-25 11:37:28

有关读取UDP 数据包 不定长度的问题。的相关文章

Android模拟器接收UDP数据包的若干问题分析_Android

本文实例分析了Android模拟器接收UDP数据包的若干问题.分享给大家供大家参考,具体如下: android模拟器无法接收UDP数据包 代码如下: DatagramPacket pack = null; DatagramSocket mail_data = null; byte receiver[] = new byte[100]; try { pack = new DatagramPacket(receiver,receiver.length); mail_data = new Datagr

Android模拟器接收UDP数据包的若干问题分析

本文实例分析了Android模拟器接收UDP数据包的若干问题.分享给大家供大家参考,具体如下: android模拟器无法接收UDP数据包 代码如下: DatagramPacket pack = null; DatagramSocket mail_data = null; byte receiver[] = new byte[100]; try { pack = new DatagramPacket(receiver,receiver.length); mail_data = new Datagr

发送数据-UDP数据包的发送顺序怎么确定?

问题描述 UDP数据包的发送顺序怎么确定? 我用UDP发送数据包,在连续发送的情况下,接收端怎么确定我的发送顺序? 有什么方法,还是在发送的时候要先添加序号? 解决方案 UDP 是无顺序的,先发的包不一定会先到,所以最好还是自己在协议中增加包的编号. 接收处理时,按无序的逻辑进行,这样就能正常完成数据的接收. 否则,就换 TCP 协议吧,它的顺序是可以保证的. 解决方案二: 自己编号自己编号自己编号 解决方案三: UDP没顺序,自己需要定义协议等来完成组包

关于socket udp 数据包传输时间的问题

问题描述 关于socket udp 数据包传输时间的问题 两台计算机型号和千兆以太网卡全部相同,其中一台计算机作为服务器端,另一台作为客户端,两者通过socket建立连接(udp连接),客户端单次向服务器端发送一百万数据包(每个数据包大小为1024字节),服务器端只接收不回应,则共耗时15秒左右,但若设置服务器端将每次接收到的数据包再原路传输回去,客户端发送一个数据包,再接收到一个数据包,则客户端发送一百万包的时间为650秒,请问两者的时间为什么相差这么大? 解决方案 socket之udp传输

求救:java jpcap收发UDP数据包实例

问题描述 javajpcap收发UDP数据包实例.不要在网上down的代码.那些代码我都看过了.希望各位高手们能给我个注释比较详细的源码.如果帮到我了另外给分.邮箱:hehanjm@163.com急急急... 解决方案 解决方案二:高手..高手...求高手.小弟我很急啊...

wireshark c 文件读取-怎么用C语言读取WireShark捕获的数据包文件

问题描述 怎么用C语言读取WireShark捕获的数据包文件 怎么用C语言读取WireShark捕获的数据包文件,要求能分析出以太网头部,Ip头部,TCP头部,并提取出数据部分,下面是我写的一段代码,但是读的不对,希望高手指点//.pcap文件//#ifndef xiaohouzi//#define xiaohouzi#ifndef LITTLE_ENDIAN#define LITTLE_ENDIAN (1)#include typedef unsigned int bpf_u_int32;ty

MYSQL CLENT/SERVER数据包传输及net packet buffer作用解析

原创:转载请说明出处 水平有限再加上源码的复杂性,难免出现错误,请共同研究予以纠正 本文参考源码: Net_serv.cc(主要参考) Mysql.h.pp Mysql_socket.h Violite.h Viosocket.c Vio.c 参考书籍: 深入理解MYSQL核心技术 MYSQL核心内幕 internals-en MYSQL官方手册 LINUX系统编程手册 注意:    1.本文将主要解析非压缩MYSQL NET包,而尽量不考虑压缩的MYSQL NET包来减小难度    2.本文主

UNIX网络编程:网络数据包检测

网络数据包检测 数据包捕获(sniffer):是指在网络上进行数据收集的行为,需要通过网卡来完成. 三种访问方式: BSD Packet Filter(BPF) SVR4 Datalink Provider Interface(DLPI) linux SOCK_PACKET interface libpcap库 安装: apt-get install libpcap-dev 常用API 捕获数据包 查找缺省的用来捕获数据网络设备 char * pcap_lookupdev ( char * er

网络数据包捕获函数库Libpcap安装与使用(非常强大)

1.Libpcap简介 Libpcap是Packet Capture Libray的英文缩写,即数据包捕获函数库.该库提供的C函数接口用于捕捉经过指定网络接口的数据包,该接口应该是被设为混杂模式.这个在原始套接子中有提到. 著名的软件TCPDUMP就是在Libpcap的基础上开发而成的.Libpcap提供的接口函数实现和封装了与数据包截获有关的过程. Libpcap提供了用户级别的网络数据包捕获接口,并充分考虑到应用程序的可移植性.Libpcap可以在绝大多数Linux平台上运行.在Window