gpt4 book ai didi

linux - Linux中使用netcat、shell脚本处理丢包

转载 作者:太空宇宙 更新时间:2023-11-04 04:04:59 24 4
gpt4 key购买 nike

我正在尝试使用unix中的nc命令逐行将文件内容发送到服务器正在监听进一步处理的端口。

我正在使用以下代码:

客户:

for inFile in `ls /home/dbadmin/input_data/*.dat`
do
        while read line
        do
                echo $line
                echo $line |nc -C 127.0.0.1 7870
        done<$inFile
done

服务器:

echo "socket program"
while true
do
echo `nc -l 7870`
done

I have 75 lines in the file at the sending end, but I am getting only 60 lines in the receiver end. Can you guys help me handling this!

更新了代码以检查数字而不是读取文件

#!/bin/bash
c=1
while [ $c -le 10 ]
do
        echo "Welcone $c times"
        echo $c |nc -C 127.0.0.1 7870
        (( c++ ))
done

最佳答案

我怀疑你丢失了数据包。

当您在 shell 中执行“read”和“echo”时,它会删除空格并巧妙地更改您的文件,因此我建议“一次 1 个文件”而不是“一次 1 行”,并避免“read”和“echo”。像这样:

服务器:

echo "socket program"
while true
do
nc -l 7870
done

客户:

#!/bin/bash
for inFile in *.dat
do
nc -C 127.0.0.1 7870 < $inFile
done

已编辑如果您想测试数据包是否被丢弃,请尝试发送大量数据并查看到达的数据量是否与发送的数据量相同:

客户:

#!/bin/bash
# Send 1GB of zeroes
dd if=/dev/zero bs=1m count=1000 |nc -C 127.0.0.1 7870

示例输出:

1000+0 records in
1000+0 records out
1048576000 bytes transferred in 6.618385 secs (158433821 bytes/sec)

服务器:

echo "socket program"
while true
do
# Receive stuff and say how much
nc -l 7870 | wc -c
done

示例输出:

 1048576000

我想知道问题是否可能是 netcat 没有设置 SO_REUSEADDR 来允许重复使用地址。您可以按原样保留客户端并尝试将其作为服务器的 Perl 实现,看看是否有帮助...

#!/usr/bin/perl

use IO::Socket;
my $sock = new IO::Socket::INET (
LocalPort => '7870',
Proto => 'tcp',
Listen => 1,
Reuse => 1,
);

die "Could not create socket: $!\n" unless $sock;

while(my $new_sock = $sock->accept()){
while(<$new_sock>) { print $_; }
}

关于linux - Linux中使用netcat、shell脚本处理丢包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21574597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com