Code archives/Networking/Basic TCP Chat
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
A basic TCP chat program that shows the most basic functions required to get a single line chat system up and running. | |||||
Graphics3D 500,400,16,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% Cam = CreateCamera() PositionEntity Cam,0,200,-20 Choice$ = Input("Would you like to 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 Status = "Server started..." Else Status = "Error starting server." EndIf PType = 1 ;Is Player a host? Else Join_IP$ = Input("Enter the ip address of host: [192.168.0.231]") If Len(Join_IP) = 0 Then Join_IP = "192.168.0.231" ;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 Status = "Client connected to "+Join_IP Else Status = "Error starting client." EndIf PType = 2 ;Is Player a Client? EndIf Color 0,255,0 SetFont fntArialB 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 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() 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 Color 0,0,255 If RecMsg <> "" Then Text 10,340,Send_IP+": "+RecMsg Color 0,255,0 Text 10,370,">: "+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 Check_Keys() ;Grab any keys that get pressed TKey% = GetKey() If TKey <> 0 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) EndIf EndIf ;hitting enter key will send contents of sndmsg to client/server If KeyHit(28) Then ;Enter key 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 |
Comments
None.
Code Archives Forum