Ok ok also hier der Code vom Server:
Code: Alles auswählen
;
; ------------------------------------------------------------
;
; Scarabol - Network (Server)
;
; (c) 2006 - Scarabol
;
; ------------------------------------------------------------
;
;************************************************************************************************************************
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", #MB_ICONERROR)
End
EndIf
UsePNGImageDecoder()
;************************************************************************************************************************
Enumeration
#Menu_HideWindow
#Menu_SendString
#Menu_EnterConfig
EndEnumeration
;************************************************************************************************************************
Structure Client
ID.l
Name.s
IP.s
EndStructure
NewList Client.Client()
;************************************************************************************************************************
Procedure.s GetInternetIP()
isLoop.b = 1
Buffer.s = Space(2048)
hInet.l = InternetOpen_("PB@INET", OpenType, #Null, #Null, 0)
hURL.l = InternetOpenUrl_(hInet, "http://www.wieistmeineip.de/", #Null, 0, $80000000, 0)
Repeat
Delay(1)
InternetReadFile_(hURL, @Buffer, Len(Buffer), @Bytes)
If Bytes.l = 0
isLoop=0
Else
Html$ = Html$ + Left(Buffer, Bytes)
EndIf
Until isLoop=0
InternetCloseHandle_(hURL)
InternetCloseHandle_(hInet)
If FindString(Html$, "<h1 class="+Chr(34)+"ip"+Chr(34)+">", 0)
ProcedureReturn Left(Mid(Html$, FindString(Html$, "<h1 class="+Chr(34)+"ip"+Chr(34)+">", 0)+Len("<h1 class="+Chr(34)+"ip"+Chr(34)+">"), 15), FindString(Mid(Html$, FindString(Html$, "<h1 class="+Chr(34)+"ip"+Chr(34)+">", 0)+Len("<h1 class="+Chr(34)+"ip"+Chr(34)+">"), 15), "<", 0)-1)
Else
ProcedureReturn ""
EndIf
EndProcedure
;************************************************************************************************************************
ConfigWindow = OpenWindow(#PB_Any, 1, 1, 180, 150, #PB_Window_ScreenCentered|#PB_Window_SystemMenu, "Server - Config")
CreateGadgetList(WindowID())
Config_PortText = TextGadget(#PB_Any, 20, 23, 80, 20, "Port:")
Config_PortGadget = StringGadget(#PB_Any, 80, 20, 80, 20, "6832", #PB_String_Numeric)
Config_BufferText = TextGadget(#PB_Any, 20, 53, 60, 20, "Buffer-Size:")
Config_BufferSize = StringGadget(#PB_Any, 80, 50, 80, 20, "1000", #PB_String_Numeric)
Config_StartServer = ButtonGadget(#PB_Any, 50, 90, 80, 40, "Server Starten")
Config_InfoText = TextGadget(#PB_Any, 95, 40, 110, 20, "Server wird gestartet ...")
HideGadget(Config_InfoText, 1)
AddKeyboardShortcut(ConfigWindow, #PB_Key_Return, #Menu_EnterConfig)
Start_Config:
ActivateGadget(Config_PortGadget)
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
GadgetID = EventGadgetID()
If GadgetID = Config_StartServer
Port$ = GetGadgetText(Config_PortGadget)
Buffer$ = GetGadgetText(Config_BufferSize)
If Len(Port$) = 4 And Val(Port$) <> 0
If Val(Buffer$) <> 0
ServerPort = Val(Port$)
ServerBuffer = Val(Buffer$)
StartServer = 1
Else
MessageRequester("Error", "Sie haben keine Buffer-Größe angegeben!"+Chr(10)+"Buffer-Größe mindestens 1 Byte", #MB_ICONERROR)
EndIf
Else
MessageRequester("Error", "Fehlerhafte Port-Angabe!"+Chr(10)+"Beispiel: 6832", #MB_ICONERROR)
EndIf
EndIf
ElseIf EventID = #PB_Event_CloseWindow
End
EndIf
Until StartServer = 1
ResizeWindow(300, 100)
MoveWindow(WindowX()-60, WindowY()+25)
SetWindowTitle(ConfigWindow, "Server starten ...")
HideGadget(Config_PortText, 1)
HideGadget(Config_PortGadget, 1)
HideGadget(Config_BufferText, 1)
HideGadget(Config_BufferSize, 1)
HideGadget(Config_StartServer,1 )
HideGadget(Config_InfoText, 0)
If CreateNetworkServer(ServerPort)
CloseWindow(ConfigWindow)
ServerWindow = OpenWindow(#PB_Any, 1, 1, 640, 480, #PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_MinimizeGadget, "Server")
CreateGadgetList(WindowID())
Frame3DGadget(#PB_Any, -10, -10, 400, 150, "")
Frame3DGadget(#PB_Any, -10, 132, 400, 400, "")
Frame3DGadget(#PB_Any, 20, 20, 230, 90, "Server - Info")
TextGadget(#PB_Any, 40, 50, 100, 20, "IP-Adresse (Lokal):")
TextGadget(#PB_Any, 40, 70, 100, 20, "IP-Adresse (Internet):")
TextGadget(#PB_Any, 40, 90, 80, 20, "Clients:")
IPAdresseServerGadget = TextGadget(#PB_Any, 150, 50, 85, 20, "000.000.000.000")
IPAdresseServerGadget2 = TextGadget(#PB_Any, 150, 70, 85, 20, "000.000.000.000")
ClientsNumberServerGadget = TextGadget(#PB_Any, 150, 90, 80, 20, "0")
ServerChatLegend = EditorGadget(#PB_Any, -2, 139, 390, 322)
SendMessage_(GadgetID(ServerChatLegend), #EM_SETOPTIONS, #ECOOP_OR, #ECO_READONLY)
ServerSendChat = StringGadget(#PB_Any, -2, WindowHeight()-20, 390, 20, "")
ActivateGadget(ServerSendChat)
AddKeyboardShortcut(ServerWindow, #PB_Shortcut_F12, #Menu_HideWindow)
AddKeyboardShortcut(ServerWindow, #PB_Shortcut_Return, #Menu_SendString)
ExamineIPAddresses()
ServerIPAddress = NextIPAddress()
SetGadgetText(IPAdresseServerGadget, IPString(ServerIPAddress))
SetGadgetText(ServerChatLegend, "Willkommen ...")
AddGadgetItem(ServerChatLegend, 0, "Internet IP-Adresse wird ermittelt. Bitte warten ...")
If GetInternetIP() <> ""
SetGadgetText(IPAdresseServerGadget2, GetInternetIP())
AddGadgetItem(ServerChatLegend, 0, "Chat Lokal und über Internet verfügbar!!!")
Else
AddGadgetItem(ServerChatLegend, 0, "Internet IP-Adresse konnte nicht ermittelt.")
AddGadgetItem(ServerChatLegend, 0, "Chat nur Lokal verfügbar!!!")
EndIf
Repeat
EventID = WindowEvent()
If EventID = #PB_Event_CloseWindow
QuitServer = 1
ElseIf EventID = #PB_Event_Menu
MenuID = EventMenuID()
If MenuID = #Menu_SendString
Send$ = GetGadgetText(ServerSendChat)
If Trim(Send$) <> ""
If Left(Send$, 1) = "\"
ServerComand$ = Right(Send$, Len(Send$)-1)
If ServerComand$ = "end"
Break
EndIf
Else
Send$ = "Server: "+Send$
ForEach Client()
SendNetworkString(Client()\ID, Send$)
Next
AddGadgetItem(ServerChatLegend, 0, Send$)
SetGadgetText(ServerSendChat, "")
EndIf
EndIf
EndIf
EndIf
NetEvent = NetworkServerEvent()
If NetEvent
ClientID = NetworkClientID()
If NetEvent = 1
SetGadgetText(ClientsNumberServerGadget, Str(Val(GetGadgetText(ClientsNumberServerGadget))+1))
AddElement(Client())
Client()\ID = ClientID
Client()\Name = "Client "+Str(ClientID)
Client()\IP = ""
ElseIf NetEvent = 4
SetGadgetText(ClientsNumberServerGadget, Str(Val(GetGadgetText(ClientsNumberServerGadget))-1))
ForEach Client()
If Client()\ID = ClientID
DeleteElement(Client())
Break
EndIf
Next
ElseIf NetEvent = 2
Buffer = AllocateMemory(ServerBuffer)
ReceiveNetworkData(ClientID, Buffer, ServerBuffer)
ClientSend$ = PeekS(Buffer)
If Left(ClientSend$, 1) = "\"
ClientSendComand$ = StringField(Right(ClientSend$, Len(ClientSend$)-1), 1, " ")
If ClientSendComand$ = "name"
ForEach Client()
If Client()\ID = ClientID
ClientOldName$ = Client()\Name
Client()\Name = StringField(ClientSend$, 2, " ")
Break
EndIf
Next
SendInfo$ = ClientOldName$+" hat den Name geändert zu "+Client()\Name
AddGadgetItem(ServerChatLegend, 0, SendInfo$)
ForEach Client()
If Client()\ID <> ClientID
SendNetworkString(Client()\ID, SendInfo$)
EndIf
Next
EndIf
Else
AddGadgetItem(ServerChatLegend, 0, ClientSend$)
ForEach Client()
If Client()\ID <> ClientID
SendNetworkString(Client()\ID, ClientSend$)
EndIf
Next
EndIf
FreeMemory(Buffer)
EndIf
EndIf
Delay(10)
Until QuitServer = 1
ForEach Client()
SendNetworkString(Client()\ID, "\end")
Next
End
Else
MessageRequester("Error", "Server konnte nicht gestartet werden", #MB_ICONERROR)
StartServer = 0
Goto Start_Config
EndIf
und vom Client:
Code: Alles auswählen
;
; ------------------------------------------------------------
;
; Scarabol - Network (Client)
;
; (c) 2006 - Scarabol
;
; ------------------------------------------------------------
;
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", #MB_ICONERROR)
End
EndIf
Enumeration
#Menu_SendString
EndEnumeration
ClientName$ = "Client"
PortConfig = OpenWindow(#PB_Any, 1, 1, 220, 180, #PB_Window_ScreenCentered|#PB_Window_SystemMenu, "Client - Config")
CreateGadgetList(WindowID())
Config_IPText = TextGadget(#PB_Any, 20, 23, 60, 20, "IP-Adresse:")
Config_IP = IPAddressGadget(#PB_Any, 80, 20, 120, 20)
Config_PortText = TextGadget(#PB_Any, 20, 53, 80, 20, "Port:")
Config_PortGadget = StringGadget(#PB_Any, 80, 50, 120, 20, "6832", #PB_String_Numeric)
Config_BufferText = TextGadget(#PB_Any, 20, 83, 60, 20, "Buffer-Size:")
Config_BufferSize = StringGadget(#PB_Any, 80, 80, 120, 20, "1000", #PB_String_Numeric)
Config_StartClient = ButtonGadget(#PB_Any, 50, 120, 120, 40, "Verbindung herstellen")
Config_InfoText = TextGadget(#PB_Any, 80, 40, 140, 20, "Verbindung wird hergestellt ...")
HideGadget(Config_InfoText, 1)
Start_Config:
ActivateGadget(Config_IP)
; SetGadgetState(Config_IP, MakeIPAddress(127,0,0,1))
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
GadgetID = EventGadgetID()
If GadgetID = Config_StartClient
Port$ = GetGadgetText(Config_PortGadget)
Buffer$ = GetGadgetText(Config_BufferSize)
ServerIP$ = GetGadgetText(Config_IP)
If Len(Port$) = 4 And Val(Port$) <> 0
If ServerIP$ <> ""
If Val(Buffer$) <> 0
ServerPort = Val(Port$)
ClientBuffer = Val(Buffer$)
ServerIP = GetGadgetState(Config_IP)
StartClient = 1
Else
MessageRequester("Error", "Sie haben keine Buffer-Größe angegeben!"+Chr(10)+"Buffer-Größe mindestens 1 Byte", #MB_ICONERROR)
EndIf
Else
MessageRequester("Error", "Sie haben keine Server-IP-Adresse angegeben!"+Chr(10)+"Beispiel: 127.0.0.1", #MB_ICONERROR)
EndIf
Else
MessageRequester("Error", "Fehlerhafte Port-Angabe!"+Chr(10)+"Beispiel: 6832", #MB_ICONERROR)
EndIf
EndIf
ElseIf EventID = #PB_Event_CloseWindow
End
EndIf
Until StartClient = 1
ResizeWindow(300, 100)
MoveWindow(WindowX()-60, WindowY()+25)
SetWindowTitle(PortConfig, "Verbindung herstellen ...")
HideGadget(Config_IPText, 1)
HideGadget(Config_IP, 1)
HideGadget(Config_PortText, 1)
HideGadget(Config_PortGadget, 1)
HideGadget(Config_StartClient,1 )
HideGadget(Config_BufferText, 1)
HideGadget(Config_BufferSize, 1)
HideGadget(Config_InfoText, 0)
ServerID = OpenNetworkConnection("scarabol.dyndns.org", 6832);IPString(ServerIP), ServerPort)
If ServerID
CloseWindow(PortConfig)
ClientWindow = OpenWindow(#PB_Any, 1, 1, 640, 480, #PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_MinimizeGadget, "Client")
CreateGadgetList(WindowID())
Frame3DGadget(#PB_Any, -10, -10, 400, 150, "")
Frame3DGadget(#PB_Any, -10, 132, 400, 400, "")
Frame3DGadget(#PB_Any, 20, 20, 200, 90, "Client - Info")
TextGadget(#PB_Any, 40, 50, 80, 20, "IP-Adresse:")
TextGadget(#PB_Any, 40, 70, 80, 20, "ServerIP:")
IPAdresseClientGadget = TextGadget(#PB_Any, 120, 50, 85, 20, "000.000.000.000")
ServerIPClientGadget = TextGadget(#PB_Any, 120, 70, 80, 20, IPString(ServerIP))
ClientChatLegend = EditorGadget(#PB_Any, -2, 139, 390, 322)
SendMessage_(GadgetID(ClientChatLegend), #EM_SETOPTIONS, #ECOOP_OR, #ECO_READONLY)
ClientSendChat = StringGadget(#PB_Any, -2, WindowHeight()-20, 390, 20, "")
ActivateGadget(ClientSendChat)
AddKeyboardShortcut(ClientWindow, #PB_Shortcut_Return, #Menu_SendString)
ExamineIPAddresses()
ServerIPAddress = NextIPAddress()
SetGadgetText(IPAdresseClientGadget, IPString(ServerIPAddress))
SetGadgetText(ClientChatLegend, "Willkommen ...")
Repeat
EventID = WindowEvent()
If EventID = #PB_Event_CloseWindow
QuitClient = 1
ElseIf EventID = #PB_Event_Menu
MenuID = EventMenuID()
If MenuID = #Menu_SendString
Send$ = GetGadgetText(ClientSendChat)
If Trim(Send$) <> ""
If Left(Send$, 1) = "\"
ClientComand$ = StringField(Right(Send$, Len(Send$)-1), 1, " ")
If ClientComand$ = "end"
Break
ElseIf ClientComand$ = "name"
ClientName$ = StringField(Right(Send$, Len(Send$)-1), 2, " ")
SendNetworkString(ServerID, "\name "+ClientName$)
SetGadgetText(ClientSendChat, "")
AddGadgetItem(ClientChatLegend, 0, "Sie haben ihren Namen geändert in "+ClientName$)
EndIf
Else
Send$ = ClientName$+": "+Send$
SendNetworkString(ServerID, Send$)
AddGadgetItem(ClientChatLegend, 0, Send$)
SetGadgetText(ClientSendChat, "")
EndIf
EndIf
EndIf
EndIf
NetEvent = NetworkClientEvent(ServerID)
If NetEvent = 2
Buffer = AllocateMemory(ClientBuffer)
ReceiveNetworkData(ServerID, Buffer, ClientBuffer)
Net$ = PeekS(Buffer)
If Left(Net$, 1) = "\"
NetComand$ = Right(Net$, Len(Net$)-1)
If NetComand$ = "end"
AddGadgetItem(ClientChatLegend, 0, "Der Server wurde heruntergefahren ...")
DisableGadget(ClientSendChat, 1)
EndIf
Else
AddGadgetItem(ClientChatLegend, 0, PeekS(Buffer))
EndIf
FreeMemory(ClientBuffer)
EndIf
Delay(10)
Until QuitClient = 1
CloseNetworkConnection(ServerID)
Else
MessageRequester("Error", "Can't find the server (Is it launched ?).", #MB_ICONERROR)
EndIf
End
hoffe das hilft euch weiter
Scarabol