同时发送和接收UDP消息

时间:2014-02-02 07:59:44

标签: linux bash sockets

可以使用netcat在同一个bash脚本中发送和接收UDP消息吗?

在Linux中我想发送UDP消息并在变量中接收其输出以供进一步处理。理想情况下,我想使用netcat在bash中执行此操作,但我对其他可能性持开放态度(Java应该很容易,但如果可以避免,我不想安装其他组件)

到目前为止,我可以发出命令echo -ne 'some data' | nc -u 192.168.0.xyz 9760并通过在另一个窗口中设置监听器nc -ul 9761来查看传入信号。但问题是如何在一个过程中完成,并将输出分配给变量?

是否可以在脚本开头将侦听器进程发送到后台?如果是这样,当这个过程结束时,它是如何被破坏的?

2 个答案:

答案 0 :(得分:1)

是的,您可以为听众提供背景,如下所示:

nc -ul 9761 >/tmp/foo &
echo -ne 'some data' | nc -u 192.168.0.xyz 9760
wait # waits for the backgrounded command to complete
data=$(</tmp/foo)

答案 1 :(得分:-1)

您可以使用Socket Programming编写简短脚本。您需要在一个设备上创建一个Socket并添加UDP属性,而在另一个设备上等待传入的UDP消息。主要是消息作为字符串接收,但您可以将其保存到字符串变量并进行进一步修改。

s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) //create socket 
sendto(s, message, strlen(message) , 0 , (struct sockaddr *) &si_other, slength) //sender
recv_len = recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *) &si_other, &slength) //receiver

当然,您需要为套接字参数指定一些其他属性。 看一下这个Website。用简单的话说明了如何编写通过IP上的udp进行通信的客户端服务器场景。