Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash:通过tcp提供文件服务_Bash_Tcp - Fatal编程技术网

Bash:通过tcp提供文件服务

Bash:通过tcp提供文件服务,bash,tcp,Bash,Tcp,我应该写一个处理两个参数的函数 要部署的文件的路径(作为$1)和 输出此文件内容的端口的端口号(作为$2) 然后,该函数应使该文件的内容可供通过TCP连接到该文件的第一个程序使用。该函数不打算在后台运行任何重要内容,也不打算在文件内容流化后中止。小心不要在后台运行可能阻塞特定端口的函数 但我不知道该怎么处理 测试用例 echo -e "five\nsix\nseven" > $WORK_DIR/testfile.txt servelines $WORK_DIR/te

我应该写一个处理两个参数的函数

  • 要部署的文件的路径(作为$1)和
  • 输出此文件内容的端口的端口号(作为$2)
然后,该函数应使该文件的内容可供通过TCP连接到该文件的第一个程序使用。该函数不打算在后台运行任何重要内容,也不打算在文件内容流化后中止。小心不要在后台运行可能阻塞特定端口的函数

但我不知道该怎么处理

测试用例

echo -e "five\nsix\nseven" > $WORK_DIR/testfile.txt
servelines $WORK_DIR/testfile.txt 7777 &
sleep 0.1
RESULT=$(nc -d 127.0.0.1 7777)
[[ "$RESULT" == $(cat $WORK_DIR/testfile.txt) ]] || (echo "received results should be 'five six seven' but are '$RESULT'" && false)

有一个名为
nc
(netcat)的命令,允许您通过TCP连接发送数据

为了提供数据,您必须使用
-l
标志指示它充当服务器。它为通过stdin发送的数据提供服务

您的脚本可以如下所示

#!/bin/bash
nc -l $2 < $1
#/bin/bash
nc-l$2<$1
您可能需要安装
nc
,因此请确保已安装


netcat实际上非常有用,因此您应该花一些时间阅读手册页面(运行
man nc

谢谢您的回答,但是在文件的第一个流之后,我如何中止连接?我需要为此使用-N吗?
nc
将在第一个流之后终止。Hmm。。因为我给定的测试用例不会终止。如果我同时添加-N,它将终止post@Julian正如您所说,您的测试用例通过
-N
对我来说是成功的。在一个完美的世界中,您必须确保等待您生成的子进程。