Code archives/Networking/Basic UDP Chat
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| This is a basic client/Server chat program using the UDP protocol. I tried making it as simple and as basic as I could. Thanks to chroma for the ip to integer code. | |||||
Graphics3D 500,400,16,2
SetBuffer BackBuffer()
AppTitle("Basic UDP Example")
Global Status$
Global PortIn% = 25000
Global fntArialB = LoadFont("Arial",18,True)
Global RecMsg$
Global SndMsg$
Global PType%
Global Client%
Global Server%
Global Join_IP$
Global Send_IP%
Global Serv_IP%
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 = CreateUDPStream(PortIn) ;Server listens on 25000
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.1]")
If Len(Join_IP) = 0 Then Join_IP = "192.168.0.1"
Serv_IP = SL_DotToInt(Join_IP) ;need to change entered ip address to ip format so blitz can read
Client = CreateUDPStream(PortIn) ;Client Listens on 25000
If Client <> 0 Then
Status = "Client connected to "+Serv_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 Temp% = RecvUDPMsg(Server)
If PType = 2 Then Temp% = RecvUDPMsg(Client)
If Temp <> 0 Then DebugLog Temp
If Temp <> 0 Then
If PType = 1 Then
Send_IP = UDPMsgIP(Server) ;Get IP Address of Message Sender
RecMsg$ = ReadLine$(Server)
Else
Send_IP = UDPMsgIP(Client) ;Get IP Address of Message Sender
RecMsg$ = ReadLine$(Client)
EndIf
EndIf
UpdateWorld()
RenderWorld()
Text 10,20,"Status: "+Status
Text 10,40,"[Press 1 to send a message, press esc to exit]"
Text 10,60,"[Client must send first message so server can capture IP address]"
Color 0,0,255
If RecMsg <> "" Then Text 10,340,Send_IP+": "+RecMsg
Color 0,255,0
Text 10,370,">: "+SndMsg
Flip
Wend
ClearWorld()
End()
Function Check_Keys()
TKey% = GetKey()
If TKey <> 0 Then
If Tkey <> 8 Then ;8 = backspace key
TChr$ = Chr$(TKey)
SndMsg = SndMsg + TChr
Else
SndMsg = Left(SndMsg,Len(SndMsg)-1)
EndIf
EndIf
If KeyHit(28) Then ;Enter key
If PType = 1 And Send_IP <> 0 And SndMsg <> "" Then ;Player is a host, send message to client
;SndMsg = "Hi there mr client!"
WriteLine(Server,SndMsg)
SendUDPMsg(Server,Send_IP,PortIn)
EndIf
If PType = 2 And SndMsg <> "" Then ;Player is a client, send message to server
;SndMsg = "Hello mr server!"
WriteLine(Client,SndMsg)
SendUDPMsg(Client,Serv_IP,PortIn)
EndIf
SndMsg = ""
EndIf
End Function
Function SL_DotToInt%(ip$)
;From Blitzbasic Forums 'Chroma'
;IP address must be converted to an integer
off1=Instr(ip$,".") :ip1=Left$(ip$,off1-1)
off2=Instr(ip$,".",off1+1):ip2=Mid$(ip$,off1+1,off2-off1-1)
off3=Instr(ip$,".",off2+1):ip3=Mid$(ip$,off2+1,off3-off2-1)
off4=Instr(ip$," ",off3+1):ip4=Mid$(ip$,off3+1,off4-off3-1)
Return ip1 Shl 24 + ip2 Shl 16 + ip3 Shl 8 + ip4
End Function |
Comments
None.
Code Archives Forum