Gittb
Gittb

Reputation: 69

Network chat program!! (Need a little help)

I have been working on a small script that allows communication though the TCPsocket command. I am stuck on a small error in my code. For some reason after running it twice the it stops running the RX loop.

I also worry that while its waiting for me to enter something for the get statement, that it won't be looking for incoming messages...

Any help is greatly appreciated. Thanks in advance guys

require 'socket'

ip = 'localhost'
port = 18000

TX = Thread.new do
    loop {
        Serv = TCPSocket.open(ip, port)
        message = gets.chomp()
        Serv.write(message)
        Serv.close
    }
end
RX = Thread.new do
    loop {
        server = TCPServer.open(port)
        client = server.accept
        puts client.gets
    }
end

RX
TX.join

Upvotes: 1

Views: 66

Answers (1)

Christopher Creutzig
Christopher Creutzig

Reputation: 8774

You should initialize the server outside the loop. (And to avoid warnings, you should not reassign a constant name like Serv in a loop):

require 'socket'

ip = 'localhost'
port = 18000

TX = Thread.new do
    loop {
        conn = TCPSocket.open(ip, port)
        message = gets.chomp()
        conn.write(message)
        conn.close
    }
end
RX = Thread.new do
    server = TCPServer.open(port)
    loop {
        client = server.accept
        puts client.gets
    }
end

TX.join

If you want to serve multiple clients simultaneously, take a hint from the second example at http://ruby-doc.org/stdlib-1.9.3/libdoc/socket/rdoc/TCPServer.html and use Thread.start(server.accept) { |client| ... }.

Upvotes: 2

Related Questions