mirror of
https://github.com/nim-lang/Nim.git
synced 2026-08-30 18:41:45 +00:00
Implements streams for sockets (#15729)
This commit is contained in:
64
tests/stdlib/tsocketstreams.nim
Normal file
64
tests/stdlib/tsocketstreams.nim
Normal file
@@ -0,0 +1,64 @@
|
||||
discard """
|
||||
output: '''
|
||||
OM
|
||||
NIM
|
||||
3
|
||||
NIM
|
||||
NIM
|
||||
Hello server!
|
||||
Hi there client!
|
||||
'''"""
|
||||
import std/socketstreams, net, streams
|
||||
|
||||
block UDP:
|
||||
var recvSocket = newSocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
|
||||
var recvStream = newReadSocketStream(recvSocket)
|
||||
recvSocket.bindAddr(Port(12345), "127.0.0.1")
|
||||
|
||||
var sendSocket = newSocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
|
||||
sendSocket.connect("127.0.0.1", Port(12345))
|
||||
var sendStream = newWriteSocketStream(sendSocket)
|
||||
sendStream.write "NOM\n"
|
||||
sendStream.setPosition(1)
|
||||
echo sendStream.peekStr(2)
|
||||
sendStream.write "I"
|
||||
sendStream.setPosition(0)
|
||||
echo sendStream.readStr(3)
|
||||
echo sendStream.getPosition()
|
||||
sendStream.flush()
|
||||
|
||||
echo recvStream.readLine()
|
||||
recvStream.setPosition(0)
|
||||
echo recvStream.readLine()
|
||||
recvStream.close()
|
||||
|
||||
block TCP:
|
||||
var server = newSocket()
|
||||
server.setSockOpt(OptReusePort, true)
|
||||
server.bindAddr(Port(12345))
|
||||
server.listen()
|
||||
|
||||
var
|
||||
client = newSocket()
|
||||
clientRequestStream = newWriteSocketStream(client)
|
||||
clientResponseStream = newReadSocketStream(client)
|
||||
client.connect("127.0.0.1", Port(12345))
|
||||
clientRequestStream.writeLine("Hello server!")
|
||||
clientRequestStream.flush()
|
||||
|
||||
var
|
||||
incoming: Socket
|
||||
address: string
|
||||
server.acceptAddr(incoming, address)
|
||||
var
|
||||
serverRequestStream = newReadSocketStream(incoming)
|
||||
serverResponseStream = newWriteSocketStream(incoming)
|
||||
echo serverRequestStream.readLine()
|
||||
serverResponseStream.writeLine("Hi there client!")
|
||||
serverResponseStream.flush()
|
||||
serverResponseStream.close()
|
||||
serverRequestStream.close()
|
||||
|
||||
echo clientResponseStream.readLine()
|
||||
clientResponseStream.close()
|
||||
clientRequestStream.close()
|
||||
Reference in New Issue
Block a user