Tôi nhận thức được những nhược điểm của thiết kế "chờ-> dừng", thường được đề xuất với netcat:
server$ cat test.dat | nc -q 10 -l -p 7878
client$ nc -w 10 remotehost 7878 > out.dat
(Điều đó không đáng tin cậy: không có bao lâu bạn chờ đợi, luôn có thể xảy ra tình trạng tắc nghẽn mạng trong một giây nữa. - Một điều nữa -> tại sao phải đợi 10 giây nếu bạn có thể biết ngay rằng dữ liệu được truyền và bắt đầu xử lý chúng!)
Tôi muốn giải pháp, với việc đóng luồng tcp đáng tin cậy và tốt đẹp .
Tôi đã tìm thấy socat, với việc đóng cửa như được mô tả trong man socat
:
Khi một trong các luồng đạt hiệu quả EOF, giai đoạn kết thúc bắt đầu. Socat chuyển điều kiện EOF sang luồng khác, tức là cố gắng chỉ tắt luồng ghi của nó, cho nó cơ hội chấm dứt một cách duyên dáng.
Tôi tìm thấy các lệnh sau làm việc:
Máy chủ gửi tập tin:
server$ socat -u FILE:test.dat TCP-LISTEN:9876,reuseaddr
client$ socat -u TCP:127.0.0.1:9876 OPEN:out.dat,creat
Máy chủ nhận tệp:
server$ socat -u TCP-LISTEN:9876,reuseaddr OPEN:out.txt,creat && cat out.txt
client$ socat -u FILE:test.txt TCP:127.0.0.1:9876
Có đáng tin cậy không? Nó có thể được cải thiện? (Tôi đã sử dụng đúng tùy chọn chưa? Có tùy chọn nào tốt hơn để thiết lập không? - Có rất nhiều trong số chúng có socat)