利用Linux socat快速搭建TCP服务器

某些场合,需要在Linux上快速搭建一个TCP的服务器,接收客户端的连接,返回一些数据。

一般用于测试或者负载不大,安全性要求不高的场合,达到快速搭建的目的。

本文以客户端通过服务器的3334端口,获取服务器连接的modem网卡蜂窝信号强度为例,说明使用方法。

第一步:

假设服务器端获取modem网卡的命令及返回值如下:

其中,对我有用的如下字段:

signal quality: 100% (recent)

第二步:

随后在服务器下新建getSignalLevel.sh脚本,赋予a+x权限

#!/bin/sh -

while read command;
do
  ##echo got msg:$command

  if [[ $command == battery* ]]; then
	msg=`mmcli -m 0 | grep "signal quality:" | awk -F':' '{print $2}' | awk -F'%' '{print $1}'`
	##echo battery levle:$msg

	level=5;
	if [ $msg>80 ]; then
  		level=4
	elif [ $msg>60 ]; then
  		level=3
	elif [ $msg>40 ]; then
  		level=2
	elif [ $msg>20 ]; then
  		level=1
	else
  		level=0
	fi
	echo battery:$level
  fi
done

然后在服务器端执行如下命令:

socat -d -d tcp-l:3334,fork,reuseaddr exec:/etc/getSignalLevel.sh &

该shell命令的作用是监听3334端口,把收到的数据转发给getSignalLevel脚本处理;上述shell脚本中循环读取外部输入,如果是指定字符串打头["battery"],就转成0-4的int型singal level,并作为输出返回给socat,socat收到后通过3334端口返回给tcp client;

第三步:

起一个端口调试器,模拟客户端,输入命令,获取结果,运行截图如下:

注意,输入的battery:后面要带换行符,因为shell的read命令是检测回车换行作为字符截止的。

教程结束,enjoy!

相关推荐
持续更新中~4 小时前
有关shell指令练习2
shell
嘻嘻仙人17 小时前
【网络通信基础与实践第四讲】用户数据报协议UDP和传输控制协议TCP
网络·网络协议·udp·tcp·三次握手·流量控制·拥塞控制
只对您心动18 小时前
【C高级】有关shell脚本的一些练习
linux·c语言·shell·脚本
阑梦清川1 天前
简明linux系统编程--互斥锁--TCP--UDP初识
linux·udp·tcp·互斥锁·信号·解锁·加锁
DieSnowK1 天前
[项目][WebServer][Makefile & Shell]详细讲解
开发语言·c++·http·makefile·shell·项目·webserver
邂逅岁月5 天前
【网络原理】❤️Tcp 连接管理机制❤️ “三次握手” “四次挥手”的深度理解, 面试最热门的话题,没有之一, 保姆式教学 !!!
网络·tcp/ip·计算机网络·面试·tcp·网络连接·tcp机制
怀九日10 天前
网络高级(学习)2024.9.11
网络·网络协议·学习·tcp/ip·tcp·modbus·rtu
promise52411 天前
Linux下载压缩包:tar.gz、zip、tar.bz2格式全攻略
linux·运维·服务器·后端·bash·shell
轩轶子11 天前
【C-实践】文件服务器(1.0)
服务器·c语言·小程序·tcp
不想秃头的烟花15 天前
传输层(TCP、UDP、RDT详解)
udp·tcp·连接管理·流量控制·传输层·rdt·可靠数据传输