Bagaimana cara membuat obrolan sederhana menggunakan netcat?

27

Saat ini saya sedang mengerjakan sebuah proyek dan saya telah mengimplementasikan aplikasi obrolan sederhana menggunakan netcatperpustakaan.

Klien diminta untuk memasukkan nomor port dan perintah

nc -l -p xxxx

di mana xxxxnomor port dimasukkan oleh klien.

Demikian pula, tuan rumah diminta untuk nomor port yang sama dan koneksi dibuat menggunakan

nc <ip_address> -p xxxx

Namun, ini memberikan pengalaman obrolan kosong karena tidak menunjukkan nama pengguna dari orang yang mengetik pesan, seperti

hey
hello
what's up
Nothing

Sebaliknya, saya ingin menjadi seperti,

Foo : hey
Boo : hello
Foo : what's up
Boo : Nothing

Dapatkah saya menggunakan netcatuntuk mencapai fungsi ini atau ada hal lain yang melakukan ini?

Sachin Kamath
sumber
1
nctidak dikenal usernamedan tidak bisa mengirimnya. Yang bisa dilakukan hanyalah mengetik pesan dalam format Bob: hello.
2707974
Saya ingin menghindari hal itu. Saya juga terbuka untuk program alternatif yang dapat mencapai fungsi yang sama.
Sachin Kamath
Cobalah untuk menemukan solusi dalam jawaban
2707974

Jawaban:

34

Anda dapat melakukan sesuatu seperti ini.

Asumsikan Alice adalah server. Dia mengetik:

mawk -W interactive '$0="Alice: "$0' | nc -l -p <port_number> <ip_of_alice>

Kemudian Bob terhubung ke server itu. Dia mengetik:

mawk -W interactive '$0="Bob: "$0' | nc <ip_of_alice> <port_number>

mawkBaris - baris itu hanya menambahkan nama orang tersebut ke "obrolan". Kita perlu -W interactivemengatur tulisan yang tidak dibangun untuk stdout dan baris yang dibaca buffered dari stdin.


Sekarang Alice mengetik Hi Bobdan melihat:

Hi Bob

Bob melihat:

Alice: Hi Bob

Bob mengetik Hi Alicedan melihat:

Alice: Hi Bob
Hi Alice

Alice melihat:

Hi Bob
Bob: Hi Alice
kekacauan
sumber
2
nc tidak bisa menggunakan -s dan -l secara bersamaan. -s tidak diperlukan.
Sachin Kamath
Saya mendapat awk: opsi `-W interaktif 'tidak dikenali, diabaikan
zt1983811
@ zt1983811 Anda membutuhkan GNU awk, bukan mawk.
kekacauan
@chaos Saya memang menggunakan awk awk -W interaktif '$ 0 = "Alice:" $ 0' | nc -lvk ip port; ls -al / usr / bin / awk lrwxrwxrwx 1 root root 21 Jun 27 06:48 / usr / bin / awk -> / etc / alternative / awk
zt1983811
1
@ zt1983811 Ini adalah mawkopsi, bukan gawk. Apakah Anda mencobanya menggunakan mawksecara eksplisit?
hidangan penutup