Seite 3 von 4

Verfasst: 05.12.2006 22:03
von Joel
Starte den Server auf deinem Kumpel seinem PC und mach Folgendes:

Ergänze den Folgenden Code von der IP, Port usw. und gucke was das Ergebnis ist, nehm als Server das PB Beispiel.

Client:

Code: Alles auswählen

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

Port = 7000

Test = OpenNetworkConnection("84.0.0.1", Port)
Debug Test
Endif 

Verfasst: 05.12.2006 22:07
von Scarabol
@Konne and all others
Ich hab ja ne Verbindung über Skype, also live Bericht von Fehlern und die Programme sind einfach nur abwandlungen vom PB-Beispiel. Also ziemlich Narrensicher, außerdem hab ich das ganze ja intern in Windows getestet. Es muss also an der Internet-Verbindung liegen. Ich weiß halt nur nicht worauf ich achten muss.

1. Welche IP muss ich zum connecten verwenden?
2. Welche Ports muss ich freigeben?
3. Kann mir einer ein Beispiel für einen einfachen "Hallo"-String via Internet schicken?

hoffe ich konnts nochmal deutlich machen
Gruß
Scarabol

Verfasst: 05.12.2006 22:22
von Joel
Du musst die Externe Ip also zb. 84.55.55.55 eingeben und dann einen Port da Freischalten wo die Verbindung rein geht.

Wenn dir die Ip deines Freundes etwas Merkwürdig erscheint :mrgreen: , Geh auf Ausführen>cmd>ping und dann die IP und schon siehst du ob die Ip gültig ist.

Verfasst: 05.12.2006 22:54
von Konne
hähä ich kann mir schon vorstellen woran es liegt. warscheinlich connectest du zu "192.168.1.12" oda sowas.

Verfasst: 05.12.2006 23:34
von mk-soft
Bei http://www.dyndns.com/ anmelden

MyHost -> Dynamic DNS einrichten (Eine ist Free) und alle Probleme sind vorbei.

Im Router natürlich auch einrichten.

FF :wink:

Verfasst: 06.12.2006 15:28
von Scarabol
Ich benutze die Fritz Box als Router kann mir einer genauer sagen welchen Port ich freigeben muss?

Verfasst: 06.12.2006 19:14
von Konne
Man oh Man.
1) Wenn du schon keine Ahnung vom Internet hast warum kommst du dann auf die Gloreiche Idee nen Internet programm zu bauen?

2) Wenn du jetzt nicht mal einen Teil deines Codes postest dann wirst du hier sicher keine Hilfe krigene.

3) Schiebe nicht immer alles auf die Firewall bevor du nicht mal geschaut hast ob Fehler in deinem Program sind.

Verfasst: 06.12.2006 19:22
von Scarabol
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

Verfasst: 06.12.2006 20:49
von Joel
Also am Code liegts nicht, ich war aber "SEHR" erschrocken als ich den Code Ausführte: Da steht als Standart-Port 6832, dass ist zwar im ersten moment nicht besonderes aber das ist zufälligerweise den Port den ich bei meinem Router Freigegeben habe.

Nun meine Frage: Steht da desswegen mein Code weil ich das mal ausversehen in meinen Geposteten Codes angegeben habe und du das Kopiert hast oder hast du den Port da stehen weil du meinen PC mit einer Spyware ausspionierst :mrgreen: ??? Wenn das stimmt weiß ich auch warum sich mein PC so komisch verhält und immer die Portregeln so lange geladen werden

Verfasst: 06.12.2006 22:13
von mk-soft
Hilfe /:-> , wer hat mal einen link zu diesen Theme IP und Ports. Aber bitte nicht Wikipedia. Habe ich schon gemacht.

Von mir aus kannst es ein beliebiger Port ab 2000 sein. Heist ja nicht das der Port 6832 für dich reserviert wurde.

Allso noch einmal

Internet -> Router (IP von Provider) -> PC (IP von DHCP Router)

PC -> Internet -> (Router -> Firewall -> NAT -> Forwarding -> Port 6832 -> IP Localcomputer) -> (PC -> Port 6832 -> Server)