使用bash进行套接字通讯
来源:互联网 发布:武汉淘宝客服 编辑:程序博客网 时间:2024/06/05 14:54
日常做后台服务开发,总免不了要写测试客户端。但是tcp客户端写起来其实还是比较罗嗦的,各种错误返回,各种异常判断。。。。而我们通常并不是要写一个健壮的客户端,我们只是要一个能用的客户端来测试服务端是否正确。
这里给大家介绍一个简单易用的方法:用bash操作socket!很酷,是不是?
发送请求其实很简单,就跟往文件里写数据一样。例如
这里给大家介绍一个简单易用的方法:用bash操作socket!很酷,是不是?
man bash,查找tcp关键字,可以看到这么一段内容:
1
/dev/tcp/host/port
2
If host is a valid hostname or Internet address, and port is an integer port number or service name, bash attempts to open a TCP connection to the corresponding socket.
把其中的host和port换成我们要连接的IP和端口,就可以用来建立tcp连接了。如下:
1
exec 3<>/dev/tcp/10.6.221.149/9865
上面就建立了一个到10.6.221.149:9865的可读可写的socket连接。
其中3就是指定的连接后的socket fd,由于0、1、2分别被stdin、stdout、stderr占用,所以可用fd最小从3开始。
ip换成域名其实也是支持的,比如
注意"<>"前后不要空格,否则会出错。
其中3就是指定的连接后的socket fd,由于0、1、2分别被stdin、stdout、stderr占用,所以可用fd最小从3开始。
ip换成域名其实也是支持的,比如
1
exec 3<>/dev/tcp/www.xx.com/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来查看。
下面是我测试用的一个客户端:
用bash操作udp也差不多的,如法炮制试试吧。
如果是读取的二进制内容,可以用hexdump来查看。
1
hexdump -C -n 31 <&3
读出来效果如下:
其中-n是指示hexdump读31个字节就结束。
一个好的编程习惯,建立了连接要记得关闭。
要关闭上面的socket连接可以这么写:
当然,你不关闭其实也不一定有啥大问题,bash脚本执行结束,该连接会自动被关闭。
要关闭上面的socket连接可以这么写:
1
exec 3>&- # 关闭写,不能再发请求
2
exec 3<&- # 关闭读,不能再有返回
下面是我测试用的一个客户端:
1
#!/bin/sh
2
exec 3<>/dev/tcp/10.6.221.149/9865
3
echo
"<policy-file-request>"
>&3
4
cat <&3
瞧,这样的tcp客户端比C语言捣鼓出来的客户端代码少得不是一星半点啊。
用bash操作udp也差不多的,如法炮制试试吧。
当然,如果你很能捣鼓,还可以用bash写个服务端试试,捣鼓出来记得把代码分享给我看看。
- 使用bash进行套接字通讯
- 进程间通讯中使用UNIX套接字
- 使用windows套接字进行网络编程
- Linux C利用Socket套接字进行服务器与多个客户端进行通讯
- Linux C利用Socket套接字进行服务器与多个客户端进行通讯
- unix套接字通讯,unixsock
- 使用WM_COPYDATA进行通讯
- 11.1.3 使用UNIX域函数进行套接字编程
- 使用UNIX域函数进行套接字编程
- 关于使用UDP套接字进行本地进程通信
- 关于使用UDP套接字进行本地进程间…
- 使用TCP/IP的套接字(Socket)进行通信
- 使用Unix域套接字进行跨进程通信
- 使用TCP/IP的套接字(Socket)进行通信
- 使用TCP/IP的套接字(Socket)进行通信
- 使用TCP/IP的套接字(Socket)进行通信
- 使用TCP/IP的套接字(Socket)进行通信
- 使用UNIX域函数进行套接字编程
- 用户控件简介
- TFS 处理报表时出错
- ajax calendar 控件中文显示问题解决
- 山东日照郑氏家谱
- 交叉编译器
- 使用bash进行套接字通讯
- mysql left( right ) join使用on 与where 筛选的差异
- 全排列算法
- 博客地址转移
- 《调试九法:软硬件错误的排查之道》学习笔记
- BASH Socket
- SQL server select CONVERT 与 MySQL时间戳转换
- 好友返利网站开发 二
- C#中的进制转换(2,8,10,16允许小数)