Server:
var server = newSocket()
var client = newSocket()
server.bindAddr(Port(9000))
server.listen()
server.accept(client)
client.send("123456")
var buffer="123456789"
var length = server.recv(buffer,len(buffer),10000)
echo buffer
echo length
client.close()
server.close()
Client:
var c = newSocket()
c.connect("127.0.0.1", Port(9000))
var str=""
echo c.recv(str,6)
echo str
client.send("123456")
client.close()
len = server.recv(buffer,size) will be blocking,when len < size. I want to it like C# readBytes function. It can return 0 or len,when len < size. I have tried “buffered = true” ,it still blocks.
Btw i was interested in this subject too, i made this example:
import net, nativesockets, os
proc server =
echo "SERVER MODE"
echo "listening"
let server = newSocket()
bindAddr server, Port(1234), "127.0.0.1"
listen server
var
client = newSocket()
clients = newSeq[Socket]()
data = newString(1024)
setBlocking getFD(server), false
setBlocking getFD(client), false
while true:
sleep 1500
try:
accept server, client
add clients, client
client = newSocket()
setBlocking getFD(client), false
echo "New Client"
except: discard
for c in clients:
try:
while true:
let len = recv(c, cstring(data), len(data))
if len > 0:
echo "Client: ", data[0..<len]
discard trySend(c, "Got it")
else: break
except: discard
proc client =
echo "CLIENT MODE"
let socket = newSocket()
while true:
try:
connect socket, "127.0.0.1", Port(1234)
break
except: sleep 1000
setBlocking getFD(socket), false
echo "Client connected"
var
data = newString(1024)
count = 0
while true:
sleep 2000
let msg = "'Count: " & $count & '\''
echo "Send: ", msg
if not trySend(socket, msg):
quit "Cannot send any data"
inc count
try:
while true:
let len = recv(socket, cstring(data), len(data))
if len > 0:
echo "Server: ", data[0..<len]
else: break
except: discard
proc main =
for i in commandLineParams():
case i:
of "client": client()
of "server": server()
else: discard
main()