GNet Message woes
BlitzMax Forums/BlitzMax Beginners Area/GNet Message woes
| ||
So, I am new to BlitzMax and I am trying to figure out how to use GNet messages to simply send text input from one IDE instance to another on the same machine. To get a feel for this I stripped down Mark's gnet space shooter demo and came up with these: a receiver and transmitter using normal GNet slots first... ======== Receiver ======== Strict Const GAMEPORT=12345 Const SLOT_TYPE=0 Local host:TGNetHost=CreateGNetHost() Local obj:TGNetObject=CreateGNetObject(host) Local remoteObj:TGNetObject Local success = GNetListen( host, GAMEPORT ) If Not success Then RuntimeError "GNetListen failed" Else Print "Listening" While Not KeyHit( KEY_ESCAPE ) GNetSync host For remoteObj = EachIn GNetObjects( host, GNET_MODIFIED ) Local msg:String = GetGNetString(remoteobj,SLOT_TYPE) If msg <>"" Print msg Next Wend =========== Transmitter =========== Strict Const GAMEPORT=12345 Const SLOT_TYPE=0 Local host:TGNetHost=CreateGNetHost() Local obj:TGNetObject=CreateGNetObject( host ) Local message:TGNetObject=CreateGNetMessage(Host) Local success = GNetConnect(host,"localhost",GAMEPORT, 10000) If Not success Then RuntimeError "Connect failed" Else Print "Connected" While Not KeyHit( KEY_ESCAPE ) GNetSync host Local c:String=Input("Type something!!! > ") SetGNetString(obj,SLOT_TYPE,c) Wend Now, if I try the same thing but adapt both of these to use Gnet messages, it doesn't work even though I am doing what I am supposed to do, as far as I can tell. Below is the code for using messages instead... ======== Receiver ======== Strict Const GAMEPORT=12345 Const SLOT_TYPE=0 Local host:TGNetHost=CreateGNetHost() Local obj:TGNetObject=CreateGNetObject(host) Local remoteObj:TGNetObject Local success = GNetListen( host, GAMEPORT ) If Not success Then RuntimeError "GNetListen failed" Else Print "Listening" While Not KeyHit( KEY_ESCAPE ) GNetSync host For Local msg:TGNetObject = EachIn GNetMessages(host) Local text:String = GetGNetString(msg,SLOT_TYPE) If text <>"" Print text Next Wend =========== Transmitter =========== Strict Const GAMEPORT=12345 Const SLOT_TYPE=0 Local host:TGNetHost=CreateGNetHost() Local obj:TGNetObject=CreateGNetObject( host ) Local success = GNetConnect(host,"localhost",GAMEPORT, 10000) If Not success Then RuntimeError "Connect failed" Else Print "Connected" While Not KeyHit( KEY_ESCAPE ) GNetSync host Local c:String=Input("Type something!!! > ") Local message:TGNetObject=CreateGNetMessage(Host) SetGNetString(message,SLOT_TYPE,c) SendGNetMessage(message, obj) Wend Can anyone help me fix what's wrong with this? Thanks! |
| ||
This seems to be a problem many people have. Has no-one worked on something like this with success? |
| ||
Haven't done any of this myself, but somebody mentioned a while ago, that when you're using localhost to test two copies of your program on the same PC, you need to be using different port numbers. |
| ||
Sure you need two ports... otherwise the networkbase wouldnt know which packet has to be routed to which application. If you have a strictly acting firewall, be sure to enable both ports (not needed in original windowsfirewall of XP). If you try it on local lan (different PCs) and you are not using a router (so really local and no usage of WAN-IP) you can use the same port - coz of different IPs. Otherwise, using WAN (Internet-IP) you need to set up different ports and on your gateway you have to route the ports to the desired local-IPs. bye MB |