Simple Socket Server in Bash?

refs:

https://stackoverflow.com/questions/4739196/simple-socket-server-in-bash

http://hacktux.com/bash-socket/

http://www.cnblogs.com/hokyhu/archive/2011/09/27/2193489.html


做服务器:

$ nc -k -l portNum

$ nc -k -l 8999

$ nc -k -l 8999 > filename.out


做客户端

建立了一个到10.6.221.149:9865的可读可写的socket连接。

exec 3<>/dev/tcp/10.6.221.149/9865

 发送请求其实很简单,就跟往文件里写数据一样。例如
1
exec  "hello world."  >&3
    如果要发HTTP请求,那可以这样:
1
echo -e  "GET /crossdomain.xml HTTP/1.1\r\nHost:www.xx.com\r\n\r\n"  >&3
     二进制请求可以这样发:
1
cat bin_data >&3
    其中bin_data是已经写好的二进制包数据文件。
 
   读取服务器响应跟读文件差不多,可以这样写:
1
cat <&3
    后台关闭连接以后,cat命令会自动结束。
    如果是读取的二进制内容,可以用hexdump来查看。
1
hexdump -C -n 31 <&3
 读出来效果如下:

    其中-n是指示hexdump读31个字节就结束。
 
    一个好的编程习惯,建立了连接要记得关闭。
    要关闭上面的socket连接可以这么写:
1
2
exec 3>&- # 关闭写,不能再发请求 
exec 3<&- # 关闭读,不能再有返回
    当然,你不关闭其实也不一定有啥大问题,bash脚本执行结束,该连接会自动被关闭。

    下面是我测试用的一个客户端:
1
2
3
4
#!/bin/sh
exec 3<>/dev/tcp/10.6.221.149/9865
echo  "<policy-file-request>"  >&3
cat <&3
    瞧,这样的tcp客户端比C语言捣鼓出来的客户端代码少得不是一星半点啊。

    用bash操作udp也差不多的,如法炮制试试吧。
    当然,如果你很能捣鼓,还可以用bash写个服务端试试,捣鼓出来记得把代码分享给我看看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值