Need to convert simple UDP example

BlitzMax Forums/BlitzMax Programming/Need to convert simple UDP example

RustyKristi(Posted 2016) [#1]
Coming from B3D, I'm really finding it quite a bit hard adjusting with networking commands using BNet even though it is the closest over BNetEx in terms of command set.

From what I understand so far that the read/write strings operations and stream checking are not the same and particularly how udpstream is treated as integer in b3d.

Here's the receiver example that works:

AppTitle "Receiver"

;set up address and ports (note that if the sender and client run on different computers, then only 1 port is required)
ipAddress = dotToInt("127.0.0.1")
udpSendPort = 40001
udpRecvPort = 40002

;make stream
udpStream=CreateUDPStream(udpRecvPort)
UDPTimeouts 30 ;wait 30ms to receive see if any message comes in

i=0

Print udpStream
WaitKey

While Not KeyHit(1)

	i = i + 1
	
	If udpStream <> 0 
		recvIP = RecvUDPMsg(udpStream)
	
		If recvIP <> 0
			Print ReadString(udpStream)
		EndIf
		
		;send a message too
		WriteString udpStream, "Test reply " + Str(i)
		SendUDPMsg(udpStream, ipAddress, udpSendPort)
		
	Else
		Print "No stream created"
	EndIf

Wend

CloseUDPStream udpStream

End

Function DotToInt%(ip$)
	ip$=Trim$(ip$)
		
	ip1=split$(ip$,1,".")
	ip2=split$(ip$,2,".")
	ip3=split$(ip$,3,".")
	ip4=split$(ip$,4,".")
	
	Return ip1 Shl 24 + ip2 Shl 16 + ip3 Shl 8 + ip4
End Function 

Function Split$(in$,n,delim$)
;splits string by one character delimiter
;returns nth component
	
	For i = 1 To n
		;find location of next delimiter
		;find part to left of delimiter
		pos=Instr(in$,delim$)
		If pos=0
			;no further delimiter found
			If i<>n 
				lh$="" ;there is no nth part of the list, so return ""
			Else
				lh$=in$ ;we have found the nth part, which is the last in the list
			EndIf
			Exit ;break out of loop
		EndIf
		
		lh$ = Left(in$,pos-1)
		;discard part to left of delimiter
		in$ = Right(in$,Len(in$)-pos)
	Next
	Return lh$
End Function



It should just do nothing and wait for the sender code but it throws out error reading/writing to stream with my Blitzmax code below. Here's what I got so far:

Import PUB.BNet
Import BRL.Basic
Import BRL.Retro

AppTitle$ = "Receiver"

'set up address and ports (note that if the sender and client run on different computers, then only 1 port is required)
ipAddress% = IntIP("127.0.0.1") 
udpSendPort = 40001
udpRecvPort = 40002

'make stream
InitNetwork
Global udpStream:TUDPStream=CreateUDPStream(udpRecvPort)
UDPTimeouts 30 'wait 30ms to receive see if any message comes in

i=0

While Not KeyHit(KEY_ESCAPE)

	i = i + 1
	
	If udpStream <> Null Then
 
		recvIP = RecvUDPMsg(udpStream)
	
		If recvIP <> 0
			Print ReadString(udpStream)
		EndIf
		
		'send a message too
		WriteString udpStream, "Test reply " + String(i)
		SendUDPMsg(udpStream, ipAddress, udpSendPort)
		
	Else
		Print "No stream created"
	EndIf

Wend

CloseUDPStream udpStream

End

Function DotToInt%(ip$)

	off1=Instr(ip$,".")	  ;ip1=Left$(ip$,off1-1).ToInt()
	off2=Instr(ip$,".",off1+1);ip2=Mid$(ip$,off1+1,off2-off1-1).ToInt()
	off3=Instr(ip$,".",off2+1);ip3=Mid$(ip$,off2+1,off3-off2-1).ToInt()
	off4=Instr(ip$," ",off3+1);ip4=Mid$(ip$,off3+1,off4-off3-1).ToInt()
	Return ip1 Shl 24 + ip2 Shl 16 + ip3 Shl 8 + ip4
	
End Function

Function ReadString$(in:TStream)
	Local	length
	length=ReadInt(in)
	If length>0 And length<1024*1024 Return brl.stream.ReadString(in,length)
End Function


Appreciate any help to shed some light on this problem.