Laden...

Internetkommunikation zu einer anderen Anwendung: Geht das ohne Webserver?

Erstellt von kotibus vor 12 Jahren Letzter Beitrag vor 12 Jahren 3.310 Views
K
kotibus Themenstarter:in
24 Beiträge seit 2011
vor 12 Jahren
Internetkommunikation zu einer anderen Anwendung: Geht das ohne Webserver?

Hey,
weiß nicht, ob ich damit hier richtig bin, aber ich wüsste gerne, wie ich mit c# ein normales Windows(-Forms) Programm schreiben kann, das über das Internet mit anderen Computern (die ebenfalls das Programm installiert haben) kommuniziert. Geht das ünerhaupt ohne Webserver?

Ich weiß, wie es mit Webserver und Domain geht, eben als normale Internetseite, aber wie funktioniert das z.B. bei Computerspielen? Kann ich das nur aus Zeitvertreib (also ohne Kosten) machen?

Danke

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo kotibus, willkommen im Forum,

allgemein nennt sich das Vorgehen IPC - Interprocess-Communication. In .net gibt es ein paar Möglichkeiten dafür: TcpServer/-Client, Remoting, WCF, ...

Am einfachsten ist es mMn mit WCF. Als Einstieg siehe WCF Tutorial - Basic Interprocess Communication.

Geht das ünerhaupt ohne Webserver?

Ja. Die oben genannten Möglichkeiten benötigen keinen WebServer. Der Server, der für die Kommunikation notwendig ist, kann ein eigenes Programm sein.
Es ist nichts weiter notwendig als das .net-Framework (+ entsprechende Kentnisse zur Verwendung 😉).

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

1.130 Beiträge seit 2007
vor 12 Jahren

Klare Antwort: Jain

Man kann direkte Verbindungen über das Internet herstellen, wenn auf beiden Computern gleichzeitig ein geeignetes Programm läuft und

  • entweder einer der Computer keine Firewall hat und nicht hinter einem Nat-Router ist (esseiedenn es wurden entsprechende Regeln definiert, dass es dennoch geht) und der andere die Addresse kennt (also quasi ein Server)
  • oder beide Computer gleichzeitig von beiden Enden aus auf vorher festgelegten Ports eine Verbindung aufbauen (erfordert einen Vermittler).

Du musst also in jedem Falle einen Weg haben, wie der eine Computer die Addresse des anderen bekommt.
Wenn kein Router/Firewall im Weg ist:
Das einfachste aber für den Benutzer unfreundlichste ist es, den Benutzer die IPs herausfinden zu lassen. Ansonsten kann man soetwas wie dyndns einsetzen. Alternativ kann man irgendwo auf einem Webspace eine Datei oder ein Script platzieren.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

N
20 Beiträge seit 2010
vor 12 Jahren

Der Vollständigkeit halber sei erwähnt, dass IPC nur zur Kommunikation zweier Prozesse auf dem selben Computer geeignet ist.
Zu IPC zählen z.B. des net.pipe-Binding von WCF bzw. allgemein Anonymous/NamedPipes in .NET.

Andere Bindings von WCF sind dagegen natürlich, wie gfoidl schon gesagt hat, für die Kommunikation über Internet geeignet 😉

C
1.214 Beiträge seit 2006
vor 12 Jahren

Der Vollständigkeit halber sei erwähnt, dass IPC nur zur Kommunikation zweier Prozesse auf dem selben Computer geeignet ist.

Nein. Es spielt keine Rolle, ob die Prozesse auf demselben Rechner laufen oder nicht, man spricht trotzdem von IPC. Und named pipes gehen auch übers Netzwerk, aber das hat damit auch wieder nichts zu tun.

K
kotibus Themenstarter:in
24 Beiträge seit 2011
vor 12 Jahren

Ok, wenn ich das richtig verstehe, ist es zwar möglich (toll! 😉, allerdings muss der jeweilige Computer meine IP wissen, richtig?

Ginge das dann (angenommen meine IP ist bekannt) auch über mehrere Computer?
Und wie machen das dann z.B. Spiele und Chat-Programme? Ist die IP des Servers einfach irgendwo im Proramm hardgecodet und ändert sich nie? Wenn ja, wäre das bei mir vermutlich auch kein Problem, da ich ja meinen eigenen PC als Server nutzen möchte und (vermutlich) eine statische IP von Kabel-Deutschland habe... 😉

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo kotibus,

allerdings muss der jeweilige Computer meine IP wissen, richtig?

Klar, wie sollte er sonst wissen mit wem er sich verbindet? Die Adresse ist notwendig, das ist auch bei der Post so.

Ginge das dann (angenommen meine IP ist bekannt) auch über mehrere Computer?

Kommt auf die Technologie an. Bei WCF kann ein Server beliebig viele Clients bedienen (begrenzt durch die Ressourcen, aber theoretisch unbegrenzt).

Und wie machen das dann z.B. Spiele und Chat-Programme?

Es gibt viele Chat-Demos, such dir eins und lerne daraus. Der Server ist hier meist der Vermittler zwischen den Clients. Aber das wurde schon oft besprochen. Bitte benutze auch die Forensuche.

Ist die IP des Servers einfach irgendwo im Proramm hardgecodet und ändert sich nie?

Wenn du dir sicher bist, dass sie sich nie ändert, kannst du sie auch hartkodieren. Sonst ist das Ablegen dieser in der app.config vorzuziehen, da sie ohne Neukompilierung geändert werden kann (als UserSetting auch vom Benutzer über die Programmoberfläche). Siehe hierzu [Tutorial] Konfigurationsmodell im .NET Framework.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

K
kotibus Themenstarter:in
24 Beiträge seit 2011
vor 12 Jahren

Alles klar, danke

K
kotibus Themenstarter:in
24 Beiträge seit 2011
vor 12 Jahren

So, bin nach dem Tutorial das oben gepostet wurde vorgegangen, das Serverseiteige programm läuft. Versucht das Clientseitige nun aber eine Nachricht zu senden, bekomme ich die Fehlermeldung > Fehlermeldung:

Der Server konnte die Anforderung aufgrund eines internen Fehler nicht verarbeiten. Wenn Sie weitere Informationen zum Fehler erhalten möchten, aktivieren Sie entweder IncludeExceptionDetailInFaults (entweder über das ServiceBehaviorAttribute oder das <serviceDebug>-Konfigurationsverhalten) für den Client, um die Ausnahmeinformationen zurück an den Server zu senden, oder aktivieren Sie die Ablaufverfolgung gemäß der Microsoft .NET Framework 3.0 SDK-Dokumentation, und prüfen Sie die Serverablaufverfolgungsprotokolle.

Allerdings habe ich auch alles 1 zu 1 aus dem Tutorial übernommen (natürlich trotzdem alles gelesen und Schritt für Schritt gemacht) und keine URIs geändert oder so. Ich nehme mal an ich muss hierfür noch einige Einstellungen am PC oder Netzwerk vornehmen, richtig?

Zunächst soll das Programm übrigens nur mal auf meinem PC laufen 😉

Edit:
fange Serverseitig auch

host.Faulted += new EventHandler(host_Faulted);

und

host.UnknownMessageReceived += new EventHandler<UnknownMessageReceivedEventArgs>(host_UnknownMessageReceived);

ab, sehe aber keine Wirkung. Die Nachricht kommt also garnicht beim Server an, oder?

Edit2: Firewalls habe ich keine auf dem PC, beim router bin ich mir aber nicht sicher. Es ist ein gemieteter Router mit beschränktem Zugriff, weshalb ich da bisher nicht viel geändert habe. Aber ist das überhaupt relevant solange das Programm nur auf meinem PC läuft?

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo kotibus,

obiges Tutorial ist ab .net 4.0. Vorher ist noch eine Konfiguration für WCF notwendig. Siehe hierzu Windows Communication Foundation Configuration Schema - das schaut zwar "wild" aus, so schlimm ist es aber auch nicht. Dennoch ist dies aber lästig und daher empfiehlt es sich auf .net 4.0 zu wechseln.

Wenn du nicht auf .net 4.0 wechseln kannst/willst so kannst du auch eine weitere Alternative verwenden: Zyan, es gibt eben viele Möglichkeiten.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

K
kotibus Themenstarter:in
24 Beiträge seit 2011
vor 12 Jahren

Ah, danke! Klappt jetzt (zumindest mit der "pipe" Variante)... hatte .NET 4.0 Clientblabla verwendet (auch Serverseitig). Vielen dank, damit mach ich morgen weiter und meld mich dann evtl. nochmal 😉

K
kotibus Themenstarter:in
24 Beiträge seit 2011
vor 12 Jahren

Hey,

Local läuft jetzt sowohl Pipe als auch Proxy. Zudem ist mein Rechner (der als Server fungieren soll) als "Exposed Host" in der FB eingetragen und alle Firewalls auf beiden Testrechnern sind aus. Was muss ich nun als nächstes tun, um den Server auch im Netzwerk (oder sogar im Internet) verfügbar zu machen? Google meint, ich bräuchte eine Konfigurationsdatei, aber die war doch durch die Nutzung von .Net 4.0 überflüssig, oder? Wie also mache ich es ohne diese Datei? Muss ich lediglich eine andere Adresse als "Localhost" wählen?
Meine momentanen Adressen sind, dem Tutorial entsprechend, diese hier:

                    new Uri("http://localhost:8000"),
                    new Uri("net.pipe://localhost")
6.911 Beiträge seit 2009
vor 12 Jahren

Hallo kotibus,

beim Server kann localhost bleiben - das ist ja auch.
Beim Client muss die entsprechende (öffentlich erreichbare) IP des Servers und entsprechender Port eingetragen werden.

Beachte bitte vorsorglich [Hinweis] Wie poste ich richtig? Punkt 1.1.1. Das sind Grundlagen die eigentlich überall bei Netzwerktechnologie besser beschrieben und erklärt werden als in einem Forum.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

K
kotibus Themenstarter:in
24 Beiträge seit 2011
vor 12 Jahren

Sorry, habe mich falsch ausgedrückt:
Den "Standart-Weg" habe ich schon versucht, ich versuche jetzt einfach über den Client "http://192.168.178.20/Reverse" und "net.pipe://192.168.178.20/PipeReverse", über einen anderen PC klappt keins von beiden, auf meinem eigenen aucn nur die pipe

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo kotibus,

das NetNamedPipeBinding ist nur für die Kommunikation am selben Rechner gedacht. Übers Netzwerk geht diese nicht.

BasicHttBinding bzw. allg. HTTP geht übers Netzwerk (und auch lokal) - die Firewall muss dies jedoch auch gestatten. Ist dort der Port freigegeben? Der Rest ist raten, denn "klappt nicht" ist nicht besonders aussagekräftig. Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 5.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

K
kotibus Themenstarter:in
24 Beiträge seit 2011
vor 12 Jahren

Fehlermeldung:
Der Server hat eine Protokollverletzung ausgeführt.. Section=ResponseStatusLine ist die genau Fehlermeldung des http... und normalerweise (so kenne ich es von dem Spiel WC3, das auch immer eine Portfreigabe benötigt) bedeutet "Exposed Host" in der FritzBox, dass alle Ports freigegben sind.
Die URIs sind aber in meinem Code richtig angegeben so wie ichs geschrieben hab? Da steht nämlich jetzt nirgendwo mehr ein Port drin 😛

Edit: Hab den Port jetzt einfach hinter der IP ergänzt und jetzt klappt es auf meinem PC, aber noch immer nicht im Netzwerk obowohl (außer evtl. die Fritzbox) keine Firewalls o.Ä. mehr im Weg sein sollten. Der andere PC findet einfach keinen "lauschenden Endpunkt".

2.298 Beiträge seit 2010
vor 12 Jahren

Ist der Port denn in der Windows Firewall freigegeben? Ansonsten wirft die nämlich die Anfrage zurück.

Esseidenn du meintest mit deiner oben genannten Aussage "Firewalls habe ich keine auf dem PC", dass du die Windows Firewall deaktiviert hast.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

K
kotibus Themenstarter:in
24 Beiträge seit 2011
vor 12 Jahren

Eben das 😉 Habe alles außer der Fritz-Box Firewall ausgeschaltet. Habe außerdem noch versucht, apache zu installieren (allerdings gabs nur 32x86), wobei es schon bei der Installation sowie auch beim Starten Fehler gab 😦

K
kotibus Themenstarter:in
24 Beiträge seit 2011
vor 12 Jahren

Kann keiner mehr helfen? Kriegs einfach nicht hin.
Ich hab in der Fritzbox alle Möglichen Portfreigaben gemacht, meine IP rausgefunden und mit allen möglichen Ports probiert... aber nirgendwo findet er was. Nur der standardmäßige Port der Fritzbox klappt überhaupt, allerdings gibts hier nur eine leere Seite...

Der normale Weg, über das Internet auf meinen PC zuzugreifen, ist doch ganz einfach über die IP oder? Hier steht dann noch der Router im weg, nachdem der aber die entsprechenden Ports freigibt sollte unter diesen (also z.b. 12.34.56.78:8000) was passieren, oder? also eben wie bei mir "localhost:8000"? Oder habe ich da schon im Ansatz einen Fehler?

2.298 Beiträge seit 2010
vor 12 Jahren

Frage: Der 2. Rechner mit dem du Anfragst, ist der im LAN oder fragt der über die externe IP die dein ISP vergeben hat an?

PS: Portfreigabe in der Fritzbox reicht von extern nicht, du musst die auch zu deinem Server durchrouten.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

K
kotibus Themenstarter:in
24 Beiträge seit 2011
vor 12 Jahren

Habe zunächst mal mit meinem eigenen Versucht, irgendwas über die IP zusehen... also einfach statt "localhost:8000" mal "12.34.56.78:8000" eingegeben, dachte das würde aufs ghleiche rauskommen. Wie route ich denn durch?