Page 1 of 1
Networking question
Posted: Thu Jan 16, 2014 10:52 am
by sirrab
Hi All,
I hope someone can help me as this is driving me nuts
I am writing a program that accesses a server. when I use telnet and enter the commands no worries it works. But if I send the commands using sendnetworkstring or sendnetworkdata with chr(10) and chr(13) on the end nothing. is there something about pb that could be causing this? I cant really ask the creater of the server as I can't get into there yahoo group and there docs are a joke !
Any ideas very welcome
Craig
Re: Networking question
Posted: Thu Jan 16, 2014 2:28 pm
by swhite
Perhaps you could post your code so we can see what you are doing.
Simon
Re: Networking question
Posted: Thu Jan 16, 2014 9:07 pm
by sirrab
My code as requested
Code: Select all
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0)
End
EndIf
dccserver = OpenNetworkConnection("192.168.1.23",3246,#PB_Network_TCP)
Procedure receivedata(dccserver,waitfor$)
*Buffer = AllocateMemory(1000)
dsize = 100
If NetworkClientEvent(dccserver) = #PB_NetworkEvent_Data
FreeMemory(*Buffer)
*Buffer = AllocateMemory(1000)
dsize = ReceiveNetworkData(dccserver, *Buffer,1000)
;dsize = Len(PeekS(*Buffer))
;Debug dsize
;Debug PeekS(*Buffer)
EndIf
FreeMemory(*Buffer)
EndProcedure
Procedure senddata(dccserver,datatosend$)
*sendbuffer = AllocateMemory(Len(datatosend$) + 1)
PokeS(*sendbuffer,datatosend$)
; SendNetworkData(dccserver,*sendbuffer ,Len(datatosend$))
SendNetworkString(dccserver,datatosend$)
FreeMemory(*sendbuffer)
EndProcedure
ce$ = Chr(13) + Chr(10)
dccserver = OpenNetworkConnection("192.168.1.23",3246,#PB_Network_TCP)
If dccserver
receivedata(dccserver,"PW12080")
senddata(dccserver,"N1234" + ce$)
senddata(dccserver,"TL2836")
CloseNetworkConnection(dccserver)
EndIf
Re: Networking question
Posted: Thu Jan 16, 2014 10:24 pm
by netmaestro
Call NetworkClientEvent() in a loop to wait until you receive something. Calling it just the once won't work.
Re: Networking question
Posted: Fri Jan 17, 2014 5:51 am
by sirrab
Thanks for the reply netmaestro,
I tried that but no luck. Its like the enter key needs to be pressed. I have tried it with chr(13) added as well as chr(10) and combinations of both. Anyone know what pressing enter in telnet sends?
Thanks Craig
Re: Networking question
Posted: Fri Jan 17, 2014 8:01 am
by infratec
Hi,
try this:
Code: Select all
EnableExplicit
Procedure.i receivedata(dccserver.i, waitfor$)
Protected Result.i, dsize.i, *Buffer, Rcv$
*Buffer = AllocateMemory(1000)
If *Buffer
PokeS(*Buffer, waitfor$, -1, #PB_UTF8)
waitfor$ = PeekS(*Buffer, -1, #PB_UTF8)
Repeat
If NetworkClientEvent(dccserver) = #PB_NetworkEvent_Data
dsize = ReceiveNetworkData(dccserver, *Buffer, 1000)
If dsize
Debug dsize
Rcv$ = PeekS(*Buffer, dsize, #PB_UTF8)
Debug Rcv$
If Rcv$ = waitfor$
Result = #True
EndIf
EndIf
Else
Delay(10)
EndIf
Until Result
FreeMemory(*Buffer)
EndIf
ProcedureReturn Result
EndProcedure
Define.i dccserver
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0)
End
EndIf
dccserver = OpenNetworkConnection("192.168.1.23", 3246, #PB_Network_TCP)
If dccserver
receivedata(dccserver, "PW12080")
SendNetworkString(dccserver,"N1234" + #CRLF$, #PB_UTF8)
SendNetworkString(dccserver,"TL2836", #PB_UTF8)
CloseNetworkConnection(dccserver)
Else
MessageRequester("Error", "Was not able to connect.")
EndIf
Bernd
Re: Networking question
Posted: Tue Jan 21, 2014 5:04 am
by sirrab
Hi Al, sorry about not replaying sooner.
Thanks for all the ideas, no luck with though
Craig
Re: Networking question
Posted: Tue Feb 04, 2014 3:08 am
by RichAlgeni
Did you ever get this working?
Re: Networking question
Posted: Sun Feb 09, 2014 10:20 am
by sirrab
Sorry about the delay in replying. No I haven't got it working. Been a bit busy of late. will have to try and have a play with it this week !
Craig
Re: Networking question
Posted: Sun Feb 09, 2014 10:52 pm
by RichAlgeni
In your procedure below, you have the
#PB_NetworkEvent_Data check, but you only do it once. If there isn't data in the network receive buffer, the
#PB_NetworkEvent_Data check will fail. Your code will continue after the
EndIf statement, where the procedure will end. You need loop statement to check
#PB_NetworkEvent_Data again, and a short delay to wait until your next attempt. You also need some sort of loop counter, so that if nothing is received with a reasonable amount of time, your loop can end with some sort of error message.
Code: Select all
Procedure receivedata(dccserver,waitfor$)
*Buffer = AllocateMemory(1000)
dsize = 100
If NetworkClientEvent(dccserver) = #PB_NetworkEvent_Data
FreeMemory(*Buffer)
*Buffer = AllocateMemory(1000)
dsize = ReceiveNetworkData(dccserver, *Buffer,1000)
;dsize = Len(PeekS(*Buffer))
;Debug dsize
;Debug PeekS(*Buffer)
EndIf
FreeMemory(*Buffer)
EndProcedure
There are many ways to accomplish what you need, with Infratec's being a good example. If you are serious about learning to code, I along with others will be glad to help you. The first thing I'd recommend is to download and read Kale's book! The second thing is to always use
EnableExplicit.