# TCP MiniClient funzionante ma da migliorare

**URL:** <https://www.ruby-forum.com/t/tcp-miniclient-funzionante-ma-da-migliorare/206439>\
**Category:** IT\
**Created:** [May 1, 2011, 12:19pm UTC](https://www.ruby-forum.com/t/tcp-miniclient-funzionante-ma-da-migliorare/206439 "2011-05-01T12:19:35Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![dubstep](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/cdc98d/32.png) [@dubstep](https://www.ruby-forum.com/u/dubstep)\
**Post date:** [May 1, 2011, 12:19pm UTC](https://www.ruby-forum.com/t/tcp-miniclient-funzionante-ma-da-migliorare/206439/1 "2011-05-01T12:19:35Z")

</div>

Salve a tutti.  
Ho scritto un piccolo chatserver (TCPServer::new etc etc)  
che usiamo a lezione per chattare in gruppo in tranquillità loggando  
con client tipo netcat o telnet.  
Oggi mi sono messo a scrivere un client e sarò inesperto ma ho  
realizzato  
che è meno banale del previsto ç\_ç.(colpa mia sicuramente!sono  
inesperto)  
Alla fine sono riuscito a scrivere qualcosa di effettivamente  
funzionante  
ma sono sicuro che esistono altre maniere per ottenere lo stesso  
risultato e cerco qualcuno che mi possa illuminare al riguardo.  
L’ossatura del client è:  
#################################################################  
require ‘socket’  
connection=TCPSocket::new(“127.0.0.1”,2200)

fork do  
while 1  
a=Thread.new{ print connection.readline }  
a.join  
end  
end

while 1  
b=Thread.new { input=sprintf(gets()); connection.print(input) }  
b.join  
end

Process.exit!  
###################################################################  
L’ultima riga l’ho messa in maniera un po brutale ma funziona, mi evita  
di trovarmi un processo ancora attivo dopo l’uscita dal primo( esiste un  
modo meno brutale di scrivere sta cosa?)  
Per quanto riguarda i vari tentativi precedenti ho provato a scrivere 2  
thread senza il fork ma non sono riuscito a trovare un modo per farli  
dialogare tra loro o comunque a sbloccarmi l’IO.  
Sono sicuro che c’è qualcosa a livello di Thread,Socket o IO che mi  
sfugge.  
Ribadisco: il client funziona ma non mi sento soddisfatto, mi pare  
di aver scritto qualcosa che poteva essere fatta in maniera molto piu  
performante ed elegante. Grazie in anticipo e Saluti.

---

<div class="post-metadata">

**Author:** ![nick\_82](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/8baadc/32.png) [@nick\_82](https://www.ruby-forum.com/u/nick_82)\
**Post date:** [May 1, 2011, 6:53pm UTC](https://www.ruby-forum.com/t/tcp-miniclient-funzionante-ma-da-migliorare/206439/2 "2011-05-01T18:53:03Z")

</div>

beh ho realizzato che i thread non mi servono a nulla col fork…  
quindi ho riscritto l’ossatura del client così:

require ‘socket’  
connection=TCPSocket::new(“127.0.0.1”,2200)

fork do  
while 1  
print connection.readline  
end  
end

while 1  
input=sprintf(gets())  
connection.print(input)  
end

ma restano i quesiti del post precedente.  
i thread nell’altro client li avevo messi commettendo un errore banale  
probabilmente perchè avevo il cervello in pappa dopo aver provato per  
mezz’ora a far funzionare il tutto senza andare in fork sul processo.

---

<div class="post-metadata">

**Author:** ![nick\_82](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/8baadc/32.png) [@nick\_82](https://www.ruby-forum.com/u/nick_82)\
**Post date:** [May 2, 2011, 2:15pm UTC](https://www.ruby-forum.com/t/tcp-miniclient-funzionante-ma-da-migliorare/206439/3 "2011-05-02T14:15:26Z")

</div>

Alla fine riaffrontando il problema con il classico “cervello del giorno  
dopo”  
ho realizzato che la soluzione piu semplice sembra essere:  
######################################  
require ‘socket’

sock=TCPSocket::new(“127.0.0.1”,2200)

b=Thread.new {  
while 1  
input=sprintf(gets())  
sock.print(input)  
end  
}

while 1  
print sock.readline  
end

b.join  
#####################################  
Ho provato cose arzigogolate pensando nella maniera totalmente errata ed  
alla fine, riaffrontando il programmino con calma ho capito che la  
soluzione era veramente dietro l’angolo…bon almeno credo di aver  
imparato da solo qualcosa 😃  
Saluti e scuse per lo spam.(consigli sono sempre ben accetti, o altre  
soluzioni praticabili)
