如何使用PHP udp 发送16进制数据

最近遇到一个项目需要用到udp发送16进制数据到某IP:端口 udp用起来了 但是如何发送16进制数据呢?尝试好久无发解决,希望指点12.

这里贴出我在网上学来的代码,通过这种方式发送过去的一直是字符串并不是16进制。

谢谢了

        $ip = '127.0.0.1';
        $port = '8888';
        $str_hex = '020304055A00006455230101110040F38590C77A501141';
        $handle = stream_socket_client('udp://'.$ip.':'.$port,$errno,$errstr);
        if (!$handle) {
            die('ERROR:'.$errno. '- '.$errstr.'\n');
        }
        fwrite($handle,$str_hex.'\n');
        fclose($handle);
php

2个回答

看了下,你那个是16进制字符串,而不是十六进制字节

https://www.cnblogs.com/lxcsmallcity/p/3259471.html
这个应该是你要的

发送的时候需要转成bytehex格式,你的那个方法只是转成hexstr,用这个方法可以转成串口识别的数据pack('H*',$msg),接收的地方用hex2bin()就能把串口返回的hex转成直观的字符串

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
UDP DatagramSocket 发送16进制数据
DatagramPacket 参数有 byte buf[] 数据, int length 数据长度,SocketAddress address 地址. 我使用DatagramPacket 发送String 0636170517412500ffddb1 数据到服务器上.因为DatagramPacket参数是byte[] . 所以将String.getBytes() . 通过DatagramSocket 发送。然后以抓包形式获取data 。data的值 与String的值不一致。 所以服务器没有返回数据rn![图片说明](https://img-ask.csdn.net/upload/201706/27/1498554530_565343.png)rn---------------rn这家公司自己的软件 抓包data 与String 是一致的,所以他们服务器有返回数据rn请求 大神援助、![图片说明](https://img-ask.csdn.net/upload/201706/27/1498554492_702657.png)
如何发送16进制数据呢?
//! 发送数据 我用cnCOMM的库rnvoid SayHello(DWORD dwPort)rnrn CnComm Com(0);//! v1.5 阻塞IO 不启动线程模型rn Com.Open(dwPort);rn rn Str="EB 90 04 01 00 08 03 03 00 81"rnrn Com.Write(Str);//[color=#FF0000]单片机支持的是16进制的数据,如何才能将16进制的数据发送过去呢?[/color]rn ::AfxMessageBox("1");rnrnrnPS:我试验过 使用端口通讯工具只有将rn Hex打勾才能发送
关于UDP控件16进制发送
要将000D0102以16进制用Idudpclient或Idudpserver控制发给对方,不知怎样定义或转换成怎样的数据类型才能以16进制发送,而不是ASCII码的方式发送。最后有样例就好。rn有试了几种都好像不行rn第一种将16进制字符转为16进制数值发送rnsendstr:=hexstrtohexdata(trim(memo2.Text));rnidudpclient1.SendBuffer(sendstr,hextoint(edit1.Text)+2);rn第二种直接以字符串转为指针类型发送rn sendstr:=trim(memo2.Text);rn idudpclient1.SendBuffer(Pointer(sendstr),hextoint(edit1.Text)+2);rn第三种直接文本发送(这里面是把所有的类型统一转成16字符串格式了)rn sendstr:=trim(memo2.Text);rn idudpclient1.SendBuffer(sendstr,hextoint(edit1.Text)+2);rn不知那一种是对的。如没有对的,那正确的应当怎样的转换或定义数据结构才能发送过去让对接收到的是16进制数值000D0102而不是ASCII码字符
如何使用UDP发送十六进制数据
02 11 5b 00 91 2a a8 38 25 f5 91 5d 4c af 65 54 44 6d 76 7b ff f0 14 73 e6 0a 95 9d 74 ce b3 b5 fd 61 1d 12 84 a5 04 53 3c b1 d4 f9 27 9c 7c 3f ef f0 bb 3c dc 3f 0f 25 ee 3d 7c 03rnrn数据就是以上的,如果我想发送,该如何发送那,最好写出代码,谢谢了
使用TransmitPackets发送UDP数据
使用TransmitPackets通过UDP发送内存数据。使用overlapped异步处理。
udp 如何发送较大的数据?
我用udpclient 发送 数据,将数字拆分成若干个数组(每次发送的数据大小为: byte[1470]) 然后循环发送.rn发送8次以下没有问题。但是超过8次的数据量就接受不到了。最多只能接收到7个数据包。rnrn发送用的是udp.send(); 此发送 没有用异步应该是没有问题的,8个包以下的数据量就没有问题。rn发送超过7次时 接收到最多只有收到7个包。rnrn//接收数据的代码用的是udpClient的 BeginReceive 和EndReceive 方法。不知道那里有问题。rnrnrn[color=#FF0000]是不是udp 或套接字对发送数据的次数有限制,还是代码不对,请 大侠们指点下[/color]
串口发送16进制数据
各位大师,我是刚学的,请教串口发送16进制数据 0D 8A 34 7B 23 0A 如何写VBrn我写的如下:Private Sub Command1_Click()rnCommand1.BackColor = RGB(0, 255, 0) '...按下命令1钮,变绿色rnrnCommand2.BackColor = vbWhite '...命令2钮,变白色rnMSComm1.OutBufferCount = 0 '...清空输出寄存器rnMSComm1.Output = '...是不是在这写入要发送的数据rnrnrnrnrnrnEnd SubrnrnPrivate Sub Command2_Click()rnCommand2.BackColor = vbRed '...按下命令2钮,变红色rnCommand1.BackColor = vbWhite '...命令1钮,变白色rnrnEnd SubrnrnPrivate Sub MSComm1_OnComm()rnrnrnrnrn MSComm1.CommPort = 1rnrn MSComm1.Settings = "9600,n,8,1"rnrn MSComm1.RThreshold = 1rnrn MSComm1.InputMode = comInputModeBinary '设置为2进制接收,是接收&H00 - &HFF必要条件rnrn MSComm1.PortOpen = TruernrnrnrnrnrnEnd Subrn
UDP如何接收16进制
串口服务器发过来一串字符串(7F 2E 3D 8D 5A 6C 23 5D),串口服务器的IP是192.168.1.100,端口200.rn请问用UDP编程,如何接收这串字符,并把第二个字节(2E)以十进制在编辑框 m_dy中显示出来?rn因小弟初学网络编程,请大侠们留下详细代码并注释清楚!rn万分感谢!!!!
如何使用UDP发送系统广播
我在使用UDP设计一个网络程序时,其中有一个功能就是要能知道在局域网中有哪台机子运行了我的这个程序。相当于QQ的在线好友一样,想请教各位高手如何用UDP发送系统广播,这个问题困扰我两天了,到现在还没有解决,我在这里拜托大家了。最好是有源码(精典部分)
java udp 如何接收16进制 的数据
使用DatagramPacket时,客户端发送字符串没有问题,但是如果发送16进制的数据,如何获得呢,比如客户端发送rn1234ABCD,服务器端就获得字符串“1234ABCD”
发送的UDP数据收不到?
我的程序分客户端和服务器两个,客户端向服务器发送UDP数据,客户端在局域网内的一台PC上运行,服务器在一台公网机器上运行,服务器的网络配置比较特别:托管该服务器的机房有两根专线一为电信一为网通,分别分配网通IP:*.*.*.*和电信IP:*.*.*.*,该服务器做了一个二级域名对应这两个IP。服务器有两块网卡,其红一块没有连接,并在设备管理器中停用了,两个IP都邦在一块网卡上。rnrn目前的问题是如果在程序中发送UDP数据时,直接写一个IP地址,那么程序运行正常,但如果我输入域名,然后用gethostbyname取得IP后,再用这个IP发送数据,服务器端就收不到数据。rnrn后来我把两个IP中的一个去掉了,但问题依旧。rn此外我用windump抓包发现两种方式数据都发送到了服务器,但采用域名的那种方式,数据好像没有从系统走到程序中(程序中有断点,没断着)。rnrn而且服务器很干净,没有什么乱七八糟的软件。rnrn不知道兄弟们以前碰没碰到过这种问题。谢谢大家指点。
UDP数据发送测试
IP连接两台PC,在一台PC上运行send_UDP,向另一台PC发送UDP数据。需要设置对方的IP地址,可以调整发送的速率
UDP数据发送
UDP发送数据,可以通过Wifi接收发送的数据
udp 数据发送 SOS!
buff:array[1..1024] of charrntest.buff=(#0,#224,#224,#224,#0,#0,#0,#0,#0,#0,#0,#0,#0 ... ...)rn如何将buff中的数据以十六进制的形势发送出去呀?最好用udp,写端代码吧!
网页发送udp数据
我想实现网页上点击某个按钮就用发送udp数据给服务器,不知道js可以实现吗,如果不行有没有什么好的方法来实现,谢谢了大家
UDP数据发送问题。
我应该发送的是unsigned short 类型,也就是 unsigned short 01;rnrn但是发的时候只能发送字符串,也就是我怎么转换,可以让对方解析到01啊?现在抓包发送的是30 31rnrn因为我发送的是 char data[4]="01";,实际上,我希望抓包得到01;rnrn简单的说,就是怎么将unsigned short转换成 char,让对方接收到的数据是01;rnrn请高手指点,急急急!!!!
发送udp数据
我把接收的udp数据存入一个文件,由于两个udp之间存在时间间隔因此 我也将时间间隔写入了文件,现在需要把这个文件的内容读出来,然后按照原来接收的顺序发出去,并且保证发送的任意两个udp的时间间隔和原来一样,我的代码是这样的rn byte [] bit;rn uc = new UdpClient(5103);rn btn_play.Enabled = false;rn btn_pause.Enabled = true;rn btn_stop.Enabled = true;rn FileStream fstream = new FileStream(@"E:\MDRNET合成文件\" + dTPicker_StartTime1.Value.ToString("yyyyMMdd")rn + dTPicker_StartTime2.Value.ToString("HHmmss")rn + dTPicker_EndTime1.Value.ToString("yyyyMMdd")rn + dTPicker_EndTime2.Value.ToString("HHmmss")+".mdr",FileMode.Open);rn BinaryReader br = new BinaryReader(fstream);rn while (true)rn rn bit = new byte[70];rn br.Read(bit, 0, 70);rn Thread.Sleep(1000);rn //MessageBox.Show(sle0ep.ToString());rn uc.Send(bit, bit.Length, Dns.GetHostName(), 5102); rn rn这样只能保证发送的数据是正确的,而间隔这里我用了1000ms,而间隔应该是写入文件时的两个udp之间的时间间隔,并且这个时间间隔是变化的,怎么处理才能保证发送的数据和时间间隔是正确的,和原来接收时的一样
命令行发送UDP数据
通过命令行发送UDP数据的程序,可发送字符串和二进制,发送完数据自动退出。例如: UDPsend.exe 8083 9000 192.168.1.115 string "Hello World" UDPsend.exe 8083 9000 192.168.1.115 binary 0102FF0A 可将数据从本地8083端口发送到192.169.1.115:9000
如何发送16进制的数组
如何发送一个含有0x00的16进制的数组,如:f5 02 00 00 01 00 03 f5 rnrn我使用的方式是:rnrnvoid UART1_Send_Hex(char *cmd,int n)rnrn int i=0;rn for(i=0;i
java如何发送16进制
假如有16进制的AA 55 06 00 C5 50 00 E9 0B串口命令。如何发送16进制的AA 55 06 00 C5 50 00 E9 0B这条命令。
java socket 如何发送16进制数据
java socket 如何发送16进制数据
请问vb如何发送16进制的数据到串口?
Private Sub Form_Load()rnrn Dim Instring As Stringrn rn MSComm1.CommPort = 1rn rn MSComm1.Settings = "9600,O,8,1"rn rn MSComm1.InputLen = 0rn rn MSComm1.PortOpen = Truern rn ' 将 以下 是我们设备可以识别的16进制的数,此命令送到我们的设备,应该返回7e 82 c0 00 04 00 00 00 00 00 33 rn MSComm1.Output = "7E,81,80,01,33"rn rn rnEnd SubrnrnPrivate Sub MSComm1_OnComm()rnrnDim indata As VariantrnDim bte(0) As Bytern rnSelect Case MSComm1.CommEventrnrn Case comEvReceivern indata = MSComm1.Inputrn 'Debug.Print indatarn bte(0) = AscB(indata)rn Text1.Text = bte(0)rn MSComm1.InBufferCount = 0rn End SelectrnrnrnEnd Subrnrnrn以上是我的程序,当我运行的时候,根本没有值返回,由于初次用MScomm控件,所以不知道如何去使用,请各位大侠,帮我看看,在此表示深深的感谢,我很着急!rn
winsock如何发送字符串16进制数据?
有一个字符串表示一些16进制,如010FAAC90D......rn怎么通过winsock把这些16进制发送出去呢?rn谁能给个代码,谢谢
java网络编程,UDP,发送16进制报文。
通过j2se upd网络编程,发送报文。我这里只是客户端,修改数据库连接,主要是把数据库里面的图片(base64编码处理),拆成包,发送给服务端。
关于16进制UDP发送问题。特急!!!
有这么12个00 0a e0 00 84 04 34 00 35 00 36 00十六进制字符(不是字符串),我现在要用UDPclient发送给对方,不知怎样定义他,之前COM串口我是这样作的(sendstr16:=#$00#$0a#$e0#$00#$84#$04#$34#$00#$35#$00#$36#$00;然后发送即可)没有问题,但在UDP中却不行了idudpclient1.Send(pchar(sendstr16)),解析出来却是字符串。对方接收到的根本不是00 0a e0 00 84 04 34 00 35 00 36 00十六进制字符而是把他看成字符串了,接到了28个字节本来只有12个。不好意思,没有分了,之后我补上
UDP发送16进制,代码应该怎么写?
各位高手帮帮忙!rnUDP发送16进制,代码应该怎么写?rn
服务器Qt发送16进制数据
用qt编写服务器程序,tcp连接已经搞定,但是从服务器往dtu连接的传感器发送指令出现问题,指令是16进制的AA 75 00 01 00 00 EF FF ;请问怎么发送啊?
使用udp进行数据的发送和接收
public class SendDemo { public static void main(String[] args) throws IOException { // 创建发送端Socket对象 DatagramSocket datagramSocket = new DatagramSocket(); // 创建数据,并把数据打包 byte[] ...
JustinIO发送16进制数据有误
大家一定都有用过 JustinIO吧,最近做串口通信,发现怎么都不能实现协议,最后用串口调试工具检测一下串口发送的数据,发现发送来的数据有错误,rn原本发送的数据rn byte[] bs = new byte[]rn 0x02,0x52,0x44,0x53,0x41,0x2A,0x0D;rn结果在另一段收到的是rn 82 D2 44 53 41 AA 8D rn数据的最高位出错了,检查了半天JustinIO类都没有发现错误在哪里,如果那位达人能够指明一二不胜感激。rn注:端口号,波特率,数据位,停止位,校验位都是正确的!
socket 发送16进制数据的问题
我要用socket发送一些16进制数据:rn02 00 03 00 02 ff ff 00 00 00 27rnrn请问我这样做是否正确rnrn char strBuf[11];rn memset(strBuf,0,sizeof(strBuf));rn strBuf[0]=0x02;rn strBuf[1]=0x00;rn strBuf[2]=0x03;rn strBuf[3]=0x00;rn strBuf[4]=0x22;rn strBuf[5]=0xFF;//rn strBuf[6]=0xFF;//rn strBuf[7]=0x00;rn strBuf[8]=0x00;rn strBuf[9]=0x00;rn strBuf[10]=0x27;rnrnsend(sockClient,strBuf,strlen(strBuf)+1,0);
怎样使用UDP发送30K左右的数据?
我使用D7的Indy的UDP控件发送图象,它的缓存默认是8K,可我的图片一般都是30Krn左右的。我将控件的缓冲设置为81920,可是一发送就有问题。rn请问,怎么使用UDP发送比较大的二进制文件?
MFC串口通信发送16进制数据
MFC串口通信会使用m_mscomm控件。发送数据一般是在edit control 里输入自己想发送的内容,然后点击send button。如果直接发送字符串内容,通过下面代码(send button内写入)即可: UpdateData(true); //读取编辑框内容 m_mscomm.put_Output(COleVariant(m_EditSend)); m_E...
串口发送16进制数据问题
编写一个串口通信程序,16进制发送数据,数字可以比如11010222,但是比如11ff0222这类带字母的发送不成功,请帮忙看看,下面是我的发送和接收程序 rnvoid CCommPortDlg::OnDataArrivedMsg(WPARAM wParam,LPARAM lParam) rn rn//处理收到的数据 rnint length=(int)lParam; rnchar *data=(char*)wParam; rnCString THex(_T("")); rnrnint i; rnrnif(length!=0) rn rnif(HexDisplay) rn rnfor(i=0;i ='0'&&m_strTransmit.GetAt(i*2) <='9') ¦ ¦(m_strTransmit.GetAt(i*2)>='A'&&m_strTransmit.GetAt(i*2) <='F'))&&((m_strTransmit.GetAt(i*2+1)>='0'&&m_strTransmit.GetAt(i*2+1) <='9') ¦ ¦(m_strTransmit.GetAt(i*2+1)>='A'&&m_strTransmit.GetAt(i*2+1) <='F'))) rn rndwCharToWrite++; rn rn rn rndwBytesWritten=0; rnrnif(Open&&dwCharToWrite!=0) rn rnchar* buf=new char[dwCharToWrite]; rnif(!HexSend) rn rnfor(i=0;i <(int)dwCharToWrite;i++) rn rnbuf[i]=(char)m_strTransmit.GetAt(i); rn rn rnelse rn rnj=0; rnfor(i=0;i ='0'&&m_strTransmit.GetAt(i*2) <='9') ¦ ¦(m_strTransmit.GetAt(i*2)>='A'&&m_strTransmit.GetAt(i*2) <='F'))&&((m_strTransmit.GetAt(i*2+1)>='0'&&m_strTransmit.GetAt(i*2+1) <='9') ¦ ¦(m_strTransmit.GetAt(i*2+1)>='A'&&m_strTransmit.GetAt(i*2+1) <='F'))) rn rnif(m_strTransmit.GetAt(i*2+1)>='0'&&m_strTransmit.GetAt(i*2+1) <='9') rn rnbuf[j]=m_strTransmit.GetAt(i*2+1)-48; rn rnelse rn rnbuf[j]=m_strTransmit.GetAt(i*2+1)-55; rn rnif(m_strTransmit.GetAt(i*2)>='0'&&m_strTransmit.GetAt(i*2) <='9') rn rnbuf[j]+=(m_strTransmit.GetAt(i*2)-48)*16; rn rnelse rn rnbuf[j]+=(m_strTransmit.GetAt(i*2)-55)*16; rn rnj++; rn rn rn rndwBytesWritten=m_pSerial->WritePort(buf,dwCharToWrite); rnif(dwBytesWritten==0) rn rnAfxMessageBox(_T("无法向端口写入数据!")); rn rndelete[] buf; rn rn
游戏中 16进制 数据的发送?
4D 5A 00 00 00 8C B5 BA 00 15 40 62 00 01 00 00 00 09 00 09 23 64 46 46 46 46 46 46 31 00 00rnrn4D 5A 00 00 00 93 56 C0 00 15 40 62 00 01 00 00 00 09 00 09 23 64 46 46 46 46 46 46 32 00 00rnrn4D 5A 00 00 00 9B 55 80 00 15 40 62 00 01 00 00 00 09 00 09 23 64 46 46 46 46 46 46 33 00 00rnrnrnrn在游戏中截取发言的代码,把这些代码发送给服务器,用nc -vv 服务器ip <1.txt (1.txt就是上面随便一句的代码) 结果为什么每次都失败呀?rn是不是象这样16进制的代码 头和尾都有某写固定的东西呀? 希望大虾指点..
关于SOCKET发送16进制数据
小弟最近在做一个软件,但对SOCKET不熟悉,想请各位大侠能否给一段通过SOCKET发送和接受16进制数据的完整代码,感激不尽!如果有人熟悉MODBUS TCP/IP协议的(工业控制),请指点一二,小弟必定另外开贴送200分。先行谢过了
python socket 发送16进制数据
给服务器发送16进制数据,客户端代码如下: #!/usr/bin/env python #-*- encoding: utf-8 -*- import socket if __name__=="__main__": s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(("HostIP",port))
socket 16进制数据发送问题
我的server要接收到”88 b1 65 a1 fe“,是16进制,我该如何发送!rn直接发送,接收到是”38 38 20 62 31 20 36 35 20 61 31 20 66 65“rn谢谢!
使用TIdTCPServer,TIdTCPClient如何发送16进制数?
想用TIdTCPServer,TIdTCPClient发送16进制数,如0x01 0x02 0x03 0x03 0x04 0x05 0x06。给个简单的例子吧。rnrn谢谢!
如何使用send()发送16进制数。
send(f_socket,buffer,strlen(buffer)+1,0);rnbuffer我定义的是一个字符串,我想让它在发送的时候转换为16进制数发送出去。如何获得。
如何定时发送大量udp数据?
目的:客户端定时发送4MB/s的UDP数据到服务器。rn小弟的做法:用timeSetEvent()每1ms调用一次回调函数,然后在回调函数中用SendTo()发送4kB的数据(4kB/1ms = 4MB/s)。rnrntimeSetEvent(1,1,SendProc,...);rnrnSendProc()rnrn char sendBuf[4096];rn ...rn nBytesSend = SendTo(...);rn if(nBytesSend == SOCKET_ERROR)rn rn TRACE("...%d\n",GetLastError());rn ...rn rnrnrn但是程序出现异常退出,如果改成5ms以上调用一次SendProc()就不会出现异常退出,也没见GetLastError()打印出什么错误信息。rnUDP的SendTo()是不是工作在异步模式下面呀,是不是因为SendTo()来不及发送玩4kB的数据,就调用下一个SendTo(),造成阻塞rn中断?rn各位大侠有什么好的解决方案?谢谢了
相关热词 c#部署端口监听项目、 c#接口中的属性使用方法 c# 昨天 c#func链接匿名方法 c#怎么创建文件夹 c#从键盘接收空格 c#da/ad c#部门请假管理系统 c#服务器socket c# 默认的访问修饰符

相似问题

5
vs实现UDP多点通信问题
3
我用c# 编写udp广播发送,如何得到接收设备的信息,比如IP,MAC等
5
在h5页面中,在 JavaScript 里如何调用 socket套接字 来发送数据
3
C#里用socket收发udp数据的问题
3
在多线程环境下使用udpclient进行异步UDP接收出现“访问已注销对象”的异常,怎么办?
7
JAVA UDP协议对接C#服务器 编码方式为unicode
4
nginx udp 透传无法获取客户端真实IP
2
java使用netty创年udp服务,Windows可以,linux端口监听被占用
2
用QT的UDP广播通讯,向同一个局域网的其他主机发送自己的ip地址,用控制台的方式实现,不要窗口
2
原始套接字收udp报文问题
1
别人用UDP进行数据传输,我只需监听端口进行数据接收,需要用到消息中间件吗。
1
C#需求:winform程序发送udp广播,并收到广播的机子回复消息?
2
qt中,使用UDP收发数据的时候,只能存最后一行数据?
3
安卓如何通过UDP接收一个excel表格文件,并根据其内容改变界面。
1
python后端接收到数据,怎么主动发送给前端呢?
1
C语言UDP SOCKET编程求助
2
UDP给指定IP和端口传输数据包,为什么一直显示Network is unreachable: Datagram send failed
1
VR场景下,对应传输层的协议是TCP还是UDP?
1
关于在Linux上使用套接字Socket发送一个较大UDP包的问题?
2
udp 20ms 接收保存端口数据 数据出现重复 缺失,怎么解决?有偿帮忙-急