C
chris guenther
Hi,
the UDP client/server progam below does not work as expected.
Given one input line ('df' see below) the server-thread does not (YET)
receive the UDP packet, although the client thread had sent it already.
ONLY after entering another bunch of empty lines (just hitting <ENTER>) the
receiver thread suddenly receives the packet.
It seems to me that the receiver thread is not scheduled at the time I
expect it to be scheduled (right after sending).
Can anyone throw some light on this issue ??
TIA,
Chris
#--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=
#!/usr/bin/env ruby
require 'socket'
require 'time'
STDOUT.sync=true
$port = 4321
def now; Time.new.strftime('%H:%M:%S') ;end
sThread = Thread.start do
puts "server : bound port #{$port} at #{now}\n"
server = UDPSocket.open
server.bind(nil, $port)
loop { puts "#{server.recvfrom(1024)[0]}\treceived at #{now}" }
end
sock = UDPSocket.open
sock.connect('localhost', $port)
loop {
print "--> "
case line = readline.chomp
when /^q/
exit 0
else
if line.length>0 ### Dont send EMPTY LINES
payload="'#{line}'\tsent at #{now}"
sock.send(payload, 0)
puts "sent ::\t#{payload}"
end
end
}
#--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=
############ trace of execution ############
# ruby -v -w udp_test.rb
ruby 1.8.2 (2004-12-25) [i386-mswin32]
server : bound port 4321 at 11:01:02
--> df
sent :: 'df' sent at 11:01:05
-->
-->
-->
-->
-->
-->
-->
-->
-->
--> 'df' sent at 11:01:05 received at 11:01:09
the UDP client/server progam below does not work as expected.
Given one input line ('df' see below) the server-thread does not (YET)
receive the UDP packet, although the client thread had sent it already.
ONLY after entering another bunch of empty lines (just hitting <ENTER>) the
receiver thread suddenly receives the packet.
It seems to me that the receiver thread is not scheduled at the time I
expect it to be scheduled (right after sending).
Can anyone throw some light on this issue ??
TIA,
Chris
#--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=
#!/usr/bin/env ruby
require 'socket'
require 'time'
STDOUT.sync=true
$port = 4321
def now; Time.new.strftime('%H:%M:%S') ;end
sThread = Thread.start do
puts "server : bound port #{$port} at #{now}\n"
server = UDPSocket.open
server.bind(nil, $port)
loop { puts "#{server.recvfrom(1024)[0]}\treceived at #{now}" }
end
sock = UDPSocket.open
sock.connect('localhost', $port)
loop {
print "--> "
case line = readline.chomp
when /^q/
exit 0
else
if line.length>0 ### Dont send EMPTY LINES
payload="'#{line}'\tsent at #{now}"
sock.send(payload, 0)
puts "sent ::\t#{payload}"
end
end
}
#--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=
############ trace of execution ############
# ruby -v -w udp_test.rb
ruby 1.8.2 (2004-12-25) [i386-mswin32]
server : bound port 4321 at 11:01:02
--> df
sent :: 'df' sent at 11:01:05
-->
-->
-->
-->
-->
-->
-->
-->
-->
--> 'df' sent at 11:01:05 received at 11:01:09