我正在尝试创建一个TCP服务器,它将传入的TCP数据包存储为二进制,用于键/值存储。我已经有一个Erlang客户端,它可以将TCP数据包发送到我的Erlang服务器,但是为了完整起见,我希望允许用户使用NetCat之类的客户端从命令行发送TCP数据包。用户将遵守如何格式化TCP数据包中的数据的规范,以便服务器能够理解它。
$ nc localhost 8091
add:key:testKey
Key Saved!
add:value:testValue
Value Saved!
get:key:testKey
Value: testValue
用户使用add:key/value:
和get:key:
与服务器交互。之后的内容应该按字面理解并传递给服务器。这意味着如果用户愿意,类似这样的情况是可能的。
$ nc localhost 8091
add:key:{"Foo","Bar"}
Key Saved!
add:value:["ferwe",324,{2,"this is a value"}]
Value Saved!
get:key:{"Foo","Bar"}
Value: ["ferwe",324,{2,"this is a value"}]
然而,这似乎是不可能做到的,因为实际发生的事情如下...
我将使用我的erlang客户机用一个键{"Foo","Bar"}
和一个值["ferwe",324,{2,"this is a value"}]
预填充erlang键/值存储(使用ETS)。元组和列表(在本例中)作为这个键/值存储必须能够容纳任何符合erlang的数据类型。
因此,在本例中,ETS表格中当前有1个元素:
| 关键词|价值|
| - ------|- ------|
| {“福”,“巴”}|[“ferwe”,324,{2,“这是一个值”}]|
然后,我希望通过提供Key使用NetCat检索该条目,因此我键入NetCat...
$ nc localhost 8091
get:key:{"Foo","Bar"}
My Erlang Server将此消息接收为<<"{\"Foo\",\"Bar\"}\n">>
My Erlang Server设置为接收二进制文件,这不是问题。
因此我的问题是,NetCat是否可以用来发送未编码的数据包,这些数据包不会转义引号。这样我的服务器就可以接收到密钥,并且只需〈〈"{“Foo”,“Bar”}“〉
谢谢你。
1条答案
按热度按时间7bsow1i61#
因此,我的问题是,NetCat是否可以用于发送没有转义引号的未编码数据包。
是的,netcat发送的正是您给予它的东西,所以在本例中它发送
get:key:{"Foo","Bar"}
而不转义引号。以便我的服务器能够接收密钥并且仅
<<"{"Foo","Bar"}">>
<<"{"Foo","Bar"}">>
不是语法正确的Erlang术语。是否要获取元组{"Foo","Bar"}
,以便在ETS表中查找它?可以通过解析二进制文件来实现: