Well im having trouble with the network code and this doesn't make sense to me.... but here it is anyway:
(please note to test this you will need two computers!)
Basically the problem is whatever machine is the "client machine" it will not accept incoming messages from the server. The server can see messages sent from the client and its own, but the client can only see the messages it has sent. I have tested it on both machines, so the problem has got to be with the code :s
(please note to test this you will need two computers!)
; my own VIVs Global NUM_LINES = 18 Global RESX = 1280 Global RESY = 800 Graphics3D RESX,RESY,32,2 SetBuffer BackBuffer() AppTitle("Basic TCP Example") Global Status$ Global PortIn% = 25000 Global fntArialB = LoadFont("Arial",18,True) Global RecMsg$ Global SndMsg$ Global PType% Global Client% Global ClientStrm Global Server% Global Join_IP$ Global Send_IP% Global Serv_IP% Global OpenChat% Global global_order=1 Global Cam = CreateCamera() PositionEntity Cam,0,00,-100 Type TXT Field order,age,txt$,owner,ent,tex End Type Choice$ = Input("Host a chat server or join one? [h or j]") If Choice = "h" Or Choice = "H" Then Server = CreateTCPServer(PortIn) ;Server listens on 25000 ;Check if Server was created If Server <> 0 Then AppTitle = "Server started..." Else AppTitle = "Error starting server." EndIf PType = 1 ;Player is a host! Else Join_IP$ = Input("Enter the ip address of host: [192.168.2.2]") If Len(Join_IP) = 0 Then Join_IP = "192.168.2.2" ;if no ip addy is given, this is the default Client = OpenTCPStream(Join_IP,PortIn) ;Client Listens on 25000 ;Check if client connected to server If Client <> 0 Then AppTitle = "Client connected to "+Join_IP Else AppTitle = "Error starting client." EndIf PType = 2 ;Player is a Client! EndIf Color 0,255,0 SetFont fntArialB If KeyHit(28)=1 Then EndIf ;clear enter check While Not KeyHit(1) Check_Keys() If PType = 1 Then ;Player is a server ;Check for new stream strStrm = AcceptTCPStream(Server) ;if there is a new stream, capture the stream If strStrm Then ClientStrm = strStrm Else ;if there is a captured stream check if there is a message in it If ClientStrm <> 0 If ReadAvail(ClientStrm) Then Send_IP = TCPStreamIP(ClientStrm) ;Get IP Address of Message Sender RecMsg = ReadLine$(ClientStrm) ;Get the message from the stream t.TXT = New txt global_order=global_order+1 t\owner=0 t\txt$=RecMsg t\age=0 t\order=global_order EndIf EndIf EndIf EndIf If PType = 2 Then ;Player is a client ;check if there is a message in the stream If ReadAvail(Client) Then Send_IP = TCPStreamIP(Client) ;Get IP Address of Message Sender RecMsg = ReadLine$(Client) ;Get the message from the stream End If EndIf UpdateWorld() RenderWorld() If donkeykong=1 Text 10,20,"Status: "+Status Text 10,40,"[Press any keys to type a message, return to send it]" Text 10,60,"[Press enter to send a message, press esc to exit]" Text 10,80,"[Client must send first message so server can capture Client Stream]" Text 10,100,"strStrm: "+strStrm Text 10,120,"ClienStrm: "+ClientStrm Text 10,140,"Port: "+PortIn Text 10,160,"PType: "+PType EndIf Color 0,0,255 show_all_chat() ;If RecMsg <> "" Then Text 10,340,"OTHER"+": "+RecMsg Color 0,255,0 Text 10,RESY-50,"Type your message:"+SndMsg Flip Wend If PType = 1 Then If ClientStrm <> 0 Then ;Close Server stream and server CloseTCPStream(ClientStrm) CloseTCPServer(Server) EndIf EndIf If PType = 2 Then CloseTCPStream(Client) ;Close client TCP Stream ClearWorld() End() Function show_all_chat() Delay 50 For ct = global_order To global_order-10 Step -1 For t.txt = Each Txt If t\order=ct And twoD=1 Then Color 255,255,255 If t\owner=0 Then Text 50,20*(10-(global_order-t\order)),"OTHER: "+t\txt If t\owner=1 Then Text 50,20*(10-(global_order-t\order))," SELF: "+t\txt EndIf If t\ent=0 Then If jesus = 0 Then t\ent=CreateSprite() t\Tex=CreateTexture(800,18) SpriteViewMode t\ent,2 HandleSprite t\ent,-1,-1 SetBuffer TextureBuffer(t\tex) EntityBlend t\ent,3 EntityTexture t\ent,t\tex If t\owner=0 Then Color 0,255,0 Text 0,0,"OTHER: "+t\txt EndIf If t\owner=1 Then Color 255,255,255 Text 0,0," SELF: "+t\txt EndIf SetBuffer BackBuffer() ScaleSprite t\ent,60,1.8 EndIf EndIf PositionEntity t\ent,-47,-25+(((global_order-t\order))*3),0 ; PointEntity t\ent,cam ; PointEntity cam,t\ent CameraZoom cam,2 If t\order<Global_order-16 Then FreeEntity t\ent FreeTexture t\tex Delete t EndIf Next Next End Function Function Check_Keys() ;Grab any keys that get pressed TKey% = GetKey() If TKey <> 0 And Len(SndMsg)<100 Or Tkey=8 Then If Tkey <> 8 Then ;8 = backspace key ;convert pressed key to the actual character TChr$ = Chr$(TKey) ;append string with last key pressed SndMsg = SndMsg + TChr Else ;if backspace key is hit, erase last letter of message If Len(SndMsg) > 0 Then SndMsg = Left(SndMsg,Len(SndMsg)-1) If Len(SndMsg) > 0 Then SndMsg = Left(SndMsg,Len(SndMsg)-1) If Len(SndMsg) > 0 Then SndMsg = Left(SndMsg,Len(SndMsg)-1) EndIf EndIf ;hitting enter key will send contents of sndmsg to client/server If KeyHit(28) Then ;Enter key t.TXT = New txt global_order=global_order+1 t\owner=1 t\txt$=Left$(SndMsg,Len(SndMsg)-1) t\age=0 t\order=global_order If PType = 1 And ClientStrm <> 0 And SndMsg <> "" Then ;Player is a host, send message to client ;send message to Client WriteLine(ClientStrm,SndMsg) EndIf If PType = 2 Then ;And SndMsg <> "" Then ;Player is a client, send message to server ;Send message to server WriteLine(Client,SndMsg) EndIf SndMsg = "" ;message was sent, clear message to make room for a new message OpenChat = 0 EndIf End Function
Basically the problem is whatever machine is the "client machine" it will not accept incoming messages from the server. The server can see messages sent from the client and its own, but the client can only see the messages it has sent. I have tested it on both machines, so the problem has got to be with the code :s