Perl如何用Socket发数据而不是string

Perl如何用Socket发数据而不是string

Perl如何用Socket发数据而不是string
我的Perl script需要和C程序通讯,有自己的消息格式
所以需要发数据,而不是字符
我只知道类似 print $socket "\x0f\0x0f";这样的方法
我想问一下有没有更好的方法,或是可以参考什么源码?
多谢!
不太好解释你的...
不太好解释你的问题?

你可以直接把字符串发出去。因为大部分情况下数据都是存储在变量里的。

并不是跟什么语言通讯的问题。

你真正遇到了什么问题能否详细些
socket发的都是...
socket发的都是二进制字节流,也可以是字符,因为字符是字节的一个子集。print $socket "abcdefghijklmn";这样也是可以的,不过一般协议规定都是用特殊字符\x0F\x00之类的,用作控制
比如我想发数据...
比如我想发数据OxFF到服务器端,如果服务器端不作任何转换直接
print("%x", msg), 它打印的将是 ASCII码 323535.
当然我情况有点特殊,我不能希望服务器能为我做特殊的转换,它只能
直接解析0xFF这样的16进制数据.
print("%x", ms...
print("%x", msg)
这句应该是c语言里的printf("%x", msg)吧?
那么msg是什么类型的变量?
一般定义接收缓冲区为字节数组
unsigned char msg[1024];
recv(hsocket, msg, 1024);
printf("%x", msg[0]); // 这里得到的就是第一个字节FF内容
323535正好是"2...
323535正好是"255",如果Perl发送过来的是字符,那么就转换成整型
printf("%x", atoi(msg));
可以用pack发送...
可以用pack发送特殊字符
print $socket pack("C", 255);
呵呵,你是我见...
呵呵,你是我见过的最热心的人,
我没有表述清楚,不过你理解的完全正确 :)
如果从perl直接发0xFF到服务器端,它发送的255三个字符
服务器端收到的数据就是ascii码 323535
我知道可以要求服务器做atoi,但是我不能 :(

我会试试pack
但是我并不奢求Perl能很方便的处理二进制数据,毕竟它擅长的是字符处理!

非常感谢!
因为我也是初学...
因为我也是初学,所以回答问题的时候也正好学学,我现在就写一个http协议的实现,练习练习
用 pack/unpack...
用 pack/unpack 可以实现你所说的。
不过 pack/unpack 比较复杂。