Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Chat Programm über TCP

Frage Entwicklung

Mitglied: BOBO927

BOBO927 (Level 1) - Jetzt verbinden

08.11.2012, aktualisiert 21:12 Uhr, 4351 Aufrufe, 6 Kommentare

Moin,

ich habe ein kleines Chatprogramm mit AutoIt geschrieben. Das eigentliche Problem ist allerdings nicht das Programm selber sondern der Verbindungsaufbau. Ich habe das Ganze mal über 127.0.0.1 ausprobiert und das hat wunderbar funktioniert, sowie ich aber die öffentliche IP nehme schlägt der Verbindungsaufbau fehl. Wie und wo muss ich da jetzt Ports freigeben damit mein Server funktioniert?

Quellcode Server:
01.
;===< Server >============================================= 
02.
 
03.
;===< Variablen >========================================== 
04.
 
05.
#include <Inet.au3> 
06.
 
07.
Opt("TCPTimeout",1000) 
08.
 
09.
$ipadress = _GetIP() 
10.
$port = "54321" 
11.
$maxuser = 100 
12.
For $num = 1 To $maxuser 
13.
   Assign("socket"&$num,-1) 
14.
Next 
15.
 
16.
;===< Start >============================================== 
17.
 
18.
;===< TCP starten und Socke erstellen >==================== 
19.
 
20.
TCPStartup() 
21.
$mainsocket = TCPListen($ipadress,$port,$maxuser) 
22.
 
23.
;===< GUI erstellen >====================================== 
24.
 
25.
GUICreate("Server",120,100) 
26.
   GUICtrlCreateLabel($ipadress,1,1,118,68) 
27.
   $button = GUICtrlCreateButton("Beenden",1,71,118,28) 
28.
GUISetState() 
29.
 
30.
;===< Aktionen ausführen >================================= 
31.
 
32.
Do 
33.
 
34.
;===< Verbindungen annehmen >============================== 
35.
 
36.
   For $num = 1 To $maxuser 
37.
	  If Eval("socket"&$num) > -1 Then 
38.
		 ContinueLoop 
39.
	  Else 
40.
		 $socket = TCPAccept($mainsocket) 
41.
		 Assign("socket"&$num,$socket) 
42.
		 ExitLoop 
43.
	  EndIf 
44.
   Next 
45.
 
46.
;===< Nachrichten weiterleiten >=========================== 
47.
 
48.
   For $num1 = 1 To $maxuser 
49.
	  $recv = TCPRecv(Eval("socket"&$num1),2048) 
50.
	  If $recv <> "" Then 
51.
		 For $num2 = 1 To $maxuser 
52.
			$send = TCPSend(Eval("socket"&$num2),$recv) 
53.
			If @error Then 
54.
			   Assign("socket"&$num2,-1) 
55.
			EndIf 
56.
		 Next 
57.
	  Else 
58.
		 ContinueLoop 
59.
	  EndIf 
60.
   Next 
61.
 
62.
;===< GUI überprüfen und beenden >========================= 
63.
 
64.
   $msg = GUIGetMsg() 
65.
Until $msg = $button 
66.
 
67.
GUIDelete() 
68.
TCPCloseSocket($mainsocket) 
69.
TCPShutdown() 
70.
 
71.
;===< Ende >===============================================
Quellcode Client:
01.
;===< Client >============================================= 
02.
 
03.
;===< Variablen >========================================== 
04.
 
05.
#include <GUIConstantsEx.au3> 
06.
 
07.
Opt("TCPTimeout",1000) 
08.
 
09.
$ipadress = InputBox("","Server-IP eingeben:","XXX.XXX.XXX.XXX") 
10.
$port = "54321" 
11.
$name = InputBox("","Name eingeben:") 
12.
 
13.
;===< Start >============================================== 
14.
 
15.
;===< TCP starten und Verbindung herstellen >============== 
16.
 
17.
TCPStartup() 
18.
$mainsocket = TCPConnect($ipadress,"54321") 
19.
 
20.
For $try = 1 To 10 
21.
   If $mainsocket > 0 Then 
22.
	  $data = "Verbunden mit: "&$ipadress 
23.
   Else 
24.
	  If $try < 10 Then ContinueLoop 
25.
	  MsgBox(0,"Fehler","Es konnte keine Verbindung hergestellt werden") 
26.
	  Exit 
27.
   EndIf 
28.
Next 
29.
 
30.
;===< GUI erstellen >====================================== 
31.
 
32.
GUICreate("Chatprogramm",500,500) 
33.
   $display = GUICtrlCreateEdit($data,0,0,500,470) 
34.
   $input = GUICtrlCreateInput("",0,470,450,30) 
35.
   $button = GUICtrlCreateButton("Senden",450,470,50,30) 
36.
GUISetState() 
37.
 
38.
;===< Aktionen ausführen >================================= 
39.
 
40.
Do 
41.
   $msg = GUIGetMsg() 
42.
 
43.
;===< Nachricht senden >=================================== 
44.
 
45.
   If $msg = $button Then 
46.
	  TCPSend($mainsocket,$name&": "&GUICtrlRead($input)) 
47.
   EndIf 
48.
 
49.
;===< Nachrichten empfangen >============================== 
50.
 
51.
   $recv = TCPRecv($mainsocket,2048) 
52.
   If $recv <> "" Then 
53.
	  $data = $data&@CRLF&$recv 
54.
	  GUICtrlSetData($display,$data) 
55.
   EndIf 
56.
 
57.
Until $msg = $GUI_Event_Close 
58.
 
59.
;===< Ende >===============================================
Also der Server setzt die IP automatisch und der Client muss eine IP angeben zu der die Verbindung hergestellt werden soll.

ServerIP = 127.0.0.1 und Client gibt 127.0.0.1 ein geht.
ServerIP = _GetIP (öffentliche IP) und Client gibt die vom Server angezeigte IP ein geht nicht.

Ich hoffe ihr habt ne Lösung parat
Mitglied: MrNetman
08.11.2012 um 21:16 Uhr
127.0.0.1 ist keine reale IP Localhost. Das ist jeweils die eigene. Also verbindet sich der Client auf sein eigenes Interface und führt Selbstgespräche.

Gruß Netman
Bitte warten ..
Mitglied: BOBO927
08.11.2012 um 21:26 Uhr
Das ist mir schon klar ;)
ich hatte zum testen nur einfach mal den Server mit 127.0.0.1 und 2 Clienten auf meinem Computer gestartet um zu gucken ob das Hin- und Herschicken von Nachrichten klappt.
Bitte warten ..
Mitglied: Lochkartenstanzer
08.11.2012 um 21:54 Uhr
Port 54321 in der windows-Firewall freigeben.

Was ist das Problem?
Bitte warten ..
Mitglied: Aba-it
09.11.2012 um 00:29 Uhr
Hallo

Meinst du mit der öffentlichen IP, die welche du von deinem ISP erhalten hast oder die des Computers im lokalen Netzwerk?

Falls die vom ISP, musst du in dem Fall logischerweise den Port 54321 auf den Server weiterleiten und - wie lks bereits meinte - deine Firewallkonfiguration entsprechend anpassen.

Gruss
Bitte warten ..
Mitglied: Lochkartenstanzer
09.11.2012, aktualisiert um 07:56 Uhr
Aus dem Servercode:

$ipadress = _GetIP()

Ich kenne mich mit AutoIT nicht aus (echte Programmierer benutzen Fortran (oder Fortran in C geschrieben ), aber liefert _getIP alle IP-Adressen zurück?

eventuell hast Du nur eine Bindung an eine einzige IP-Adresse statt auf allen. ggf mit 0.0.0.0 als IP-Adresse für den Listen-Befehl benutzen.

lks

Nachtrag:

ich habe mal google angeworfen (geht ganz einfach) und der erste Treffer war: http://www.autoitscript.com/autoit3/docs/libfunctions/_GetIP.htm

Irgendwie kann das so, wie Du es hingeschrieben hast,

$mainsocket = TCPListen($ipadress,$port,$maxuser)

nicht funktioneren, weil die "öffentliche" IP-Adresse an kein Interface deines computers gebunden ist.



nachtrag2:

Und wie b4tcher schon sagte, Port-Forwarding nicht vergessen!
Bitte warten ..
Mitglied: BOBO927
09.11.2012 um 10:01 Uhr
Danke erstmal für die Antworten

Jetzt hab ich nochmal ein paar neue Fragen:

Wie binde ich die IP denn an ein Interface(<-Was ist das?)

Und wie genau funktioniert Port-Forwarding? Heißt das der Router bekommt die Nachricht vom Clienten auf Port 54321 und muss die dann an die lokale NetzwerkIP des Rechners weiterleiten?

Die Portfreigabe in der Windowsfirewall hab ich leider nicht gefunden.

Ich hoffe ihr könnt mir das genauer erklären

Gruß BOBO
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung!

(2)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
Powershell CHAT Skript (5)

Frage von xpxy15 zum Thema Batch & Shell ...

Microsoft Office
32 Bit CAD Programm und Excel 64 Bit geht nicht (5)

Frage von GrueneSosseMitSpeck zum Thema Microsoft Office ...

Netzwerkmanagement
VPN: mehrere TCP Verbindungen pro Session

Frage von twoDarkMessiah zum Thema Netzwerkmanagement ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...