用bash做个tcp客户端

简介:

日常做后台服务开发,总免不了要写测试客户端。但是tcp客户端写起来其实还是比较罗嗦的,各种错误返回,各种异常判断。。。。而我们通常并不是要写一个健壮的客户端,我们只是要一个能用的客户端来测试服务端是否正确。
    这里给大家介绍一个简单易用的方法:用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换成域名其实也是支持的,比如
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来查看。
1 hexdump -C -n 31 <&3
    读出来效果如下:

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

    下面是我测试用的一个客户端:
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写个服务端试试,捣鼓出来记得把代码分享给我看看。

本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2011/11/13/2247592.html,如需转载请自行联系原作者

相关文章
|
网络协议 Java
Java BIO tcp服务端向客户端消息群发代码教程实战
java BIO tcp服务端向客户端消息群发代码教程实战
154 0
Java BIO tcp服务端向客户端消息群发代码教程实战
|
缓存 网络协议 Java
在项目中使用Curator的Java 客户端搭建后进行长TCP连接和TCP权限配置【Zookeeper】
在项目中使用Curator的Java 客户端搭建后进行长TCP连接和TCP权限配置【Zookeeper】
282 0
在项目中使用Curator的Java 客户端搭建后进行长TCP连接和TCP权限配置【Zookeeper】
|
网络协议 安全 网络架构
Tcp 客户端 | 学习笔记
快速学习 Tcp 客户端
213 0
Tcp 客户端 | 学习笔记
|
网络协议
海思3559万能平台搭建:TCP客户端网口编程
海思3559万能平台搭建:TCP客户端网口编程
157 0
|
网络协议 C++
C++网络通信实例(TCP/IP协议,包括服务端与客户端通信)
C++网络通信实例(TCP/IP协议,包括服务端与客户端通信)
479 0
C++网络通信实例(TCP/IP协议,包括服务端与客户端通信)
|
网络协议
TCP编程中的客户端与服务端的通信实现
TCP编程中的客户端与服务端的通信实现
127 0
|
网络协议
TCP客户端与服务端
Socket(简称:套接字)是进程之间通信的一个工具,好比现实中的插座,所有的家用电器要想工作都是基于插座进行,进程之间想要进行网络通信需要基于这个socket,负责进程之间的网络数据传输,好比数据的搬运工
282 0
TCP客户端与服务端
|
网络协议 图形学
Unity【Socket TCP】- 服务端与客户端通讯的简单示例
Unity【Socket TCP】- 服务端与客户端通讯的简单示例
674 0
Unity【Socket TCP】- 服务端与客户端通讯的简单示例
项目实战:Qt编译Qt库以及使用C#调用Qt库,并实现C#集成Qt的tcp客户端
项目实战:Qt编译Qt库以及使用C#调用Qt库,并实现C#集成Qt的tcp客户端
项目实战:Qt编译Qt库以及使用C#调用Qt库,并实现C#集成Qt的tcp客户端
|
网络协议 Python
Python 网络编程3:tcp客户端与tcp服务器以及下载器
Python 网络编程3:tcp客户端与tcp服务器以及下载器
186 0
Python 网络编程3:tcp客户端与tcp服务器以及下载器
下一篇
无影云桌面