Tôi muốn giới thiệu socatthay thế:
echo test | socat -t 10 - tcp:server:7
(ở đây chờ tối đa 10 giây để máy chủ trả lời và tắt máy)
socatcó thể làm nhiều hơn nhiều so với các triển khai khác nhau (khác nhau và không tương thích) của nc/ netcat, và nói chung hoạt động đáng tin cậy hơn. Đó là con dao quân đội Thụy Sĩ cuối cùng của bạn.
Trích dẫn trang man cho -ttùy chọn:
-t <thời gian chờ>
Khi một kênh đạt EOF, phần ghi của kênh khác sẽ bị tắt. Sau đó, socat đợi [timeval] giây trước khi chấm dứt. Mặc định là 0,5 giây. Thời gian chờ này chỉ áp dụng cho các địa chỉ nơi phần viết và đọc có thể được đóng độc lập. Khi trong khoảng thời gian chờ, phần đọc cho EOF, socatchấm dứt mà không chờ thời gian chờ.
Vì vậy, ở trên, sau khi echoviết test\n, nó thoát ra, đóng ống. socatnhìn thấy EOF trên -kênh của nó (stdin), sau đó tắt hướng ghi của ổ cắm TCP và chờ dịch vụ từ xa cũng tắt hoặc trong 10 giây không hoạt động trước. Các echodịch vụ có nghĩa là chấm dứt kết nối càng sớm càng đầu kia đã đóng cửa hướng gửi nó, vì vậy lệnh đó không nên dùng bất kỳ dài hơn thời gian cần thiết để thiết lập kết nối, trao đổi dữ liệu và tắt.
Với OpenBSD netcathoặc cổng của nó sang Linux đó là một mặc định trên các phiên bản gần đây của Debian và các dẫn xuất ít nhất, một xấp xỉ sẽ là nc -Nw10 server 7(đó là khác nhau ở chỗ nc's -wlà cả một thời gian chờ kết nối và thời gian chờ không hoạt động)
Để triển khai echodịch vụ TCP trên cổng 7777 để thử nghiệm:
socat tcp-listen:7777,reuseaddr,fork exec:cat,nofork
( forkđể rẽ nhánh một quy trình cho mỗi kết nối đến, noforkđể thực hiện cattrực tiếp trong quy trình đó với stdin / stdout của nó là ổ cắm TCP, giống như khi sử dụng (x)inetd).
Một số thời gian trên giao diện loopback, với zsh:
$ time echo test | socat -t10 - tcp:localhost:7777
test
echo test 0.00s user 0.00s system 54% cpu 0.001 total
socat -t10 - tcp:localhost:7777 0.00s user 0.01s system 55% cpu 0.009 total