The roStreamSocket component enables BrightScript apps to accept and connect to TCP streams as well as send and receive data with them. The interface is modeled on and works much like standard Berkeley sockets.
Supported Interfaces
- ifSocketConnection
- ifSocket
- ifSocketAsync
- ifSocketStatus
- ifSocketConnectionStatus
- ifSocketConnectionOption
Supported Events
Description
This object is created without any arguments:
- CreateObject("roStreamSocket")
Open TCP Connection to Server
sendAddress = CreateObject("roSocketAddress")
sendAddress.SetAddress("www.google.com:80")
socket = CreateObject("roStreamSocket")
socket.setSendToAddress(sendAddress)
If socket.Connect()
Print "Connected Successfully"
End If
Echo Server
function main()
messagePort = CreateObject("roMessagePort")
connections = {}
buffer = CreateObject("roByteArray")
buffer[512] = 0
tcpListen = CreateObject("roStreamSocket")
tcpListen.setMessagePort(messagePort)
addr = CreateObject("roSocketAddress")
addr.setPort(54321)
tcpListen.setAddress(addr)
tcpListen.notifyReadable(true)
tcpListen.listen(4)
if not tcpListen.eOK()
print "Error creating listen socket"
stop
end if
while True
event = wait(0, messagePort)
if type(event) = "roSocketEvent"
changedID = event.getSocketID()
if changedID = tcpListen.getID() and tcpListen.isReadable()
' New
newConnection = tcpListen.accept()
if newConnection = Invalid
print "accept failed"
else
print "accepted new connection " newConnection.getID()
newConnection.notifyReadable(true)
newConnection.setMessagePort(messagePort)
connections[Stri(newConnection.getID())] = newConnection
end if
else
' Activity on an open connection
connection = connections[Stri(changedID)]
closed = False
if connection.isReadable()
received = connection.receive(buffer, 0, 512)
print "received is " received
if received > 0
print "Echo input: '"; buffer.ToAsciiString(); "'"
' If we are unable to send, just drop data for now.
' You could use notifywritable and buffer data, but that is
' omitted for clarity.
connection.send(buffer, 0, received)
else if received=0 ' client closed
closed = True
end if
end if
if closed or not connection.eOK()
print "closing connection " changedID
connection.close()
connections.delete(Stri(changedID))
end if
end if
end if
end while
print "Main loop exited"
tcpListen.close()
for each id in connections
connections[id].close()
end for
End Function