Sockets überbrücken

Nikon the Third

Erfahrenes Mitglied
Hallo.
Ich möchte ein Programm schreiben, welches 2 Sockets miteinander verbindet.

Jede Meldung, die vom 1. Socket kommt, wird auf den 2. umgeleitet und umgekehrt.

Jedoch kommt jede Meldung, die ich z.B. auf den Socket 8888 sende, irgendwie als Echo wieder zurück. Ich leite sie auf den Socket 8889 weiter, dort kommt sie wieder als Echo zurück, wieder au 8888, usw... Gibt es eine Möglichkeit, ein Echo zu erkennen, ohne eine Liste der gesendeten Meldungen anzulegen?

In Socket.SetSocketOption habe ich jedoch nichts hilfreiches gefunden.
(Es sind übrigens Broadcast Sockets)
 
Ich habe vor, zwei Sockets zu "verbinden".
Wenn vom 1. Socket Daten empfangen werden, sollen sie mit einem Programm auf den 2. Socket gespielt werden und umgekehrt.
Beide Sockets sind BroadcastSockets, d.h. die Daten können von jedem empfangen werden.
Wenn ich jedoch die Nachricht "Hallo" auf den 1. Socket schreibe, kommt sie auch dort wieder an. (Ich weiß nicht genug über Sockets, um das begründen zu können.)

Wenn also jemand im Netzwerk auf den 1. Socket "Hallo" schreibt, empfange ich die Daten und schreibe sie auf den 2. Socket weiter. Dort kommen sie jedoch ebenfalls wieder an. (Den Grund kenne ich nicht.) Nachdem ich die Daten nun noch einmal am 2. Socket empfangen habe, sende ich sie wieder auf den 1. Socket (weil das der Sinn des Programms ist). Das ist also eine endlose Schleife.

Mein Problem ist also dieser "Echoeffekt", den ich mir bei einem sternförmigen Netz jedoch nicht erklären kann.

Darum die Frage, ob ich diesen "ausschalten" oder kompensieren kann, vielleicht mit einer SocketOption?

Danke auf jeden Fall schon mal für jeden Hinweis... ;)
 
Der Grund übrigens ist jener, dass ich auf einem Computer 2 Programme laufen lassen möchte, die normalerweise den selben Socket benötigen würden.

Die beiden Programme sind zueinander kompatibel.
Darum lasse ich auf einem 2. Computer diesen Socketwechsler im Hintergrund laufen.
 
Lokale IP:

IPAddress.Any, wegen Broadcasting

Wenn dieser Echoeffekt nicht wäre, würde alles (!) funktionieren... ;)
 
Zuletzt bearbeitet:
Kann es sein das du keinen Echoeffekt hast sondern der Programmablauf selber der Echoeffekt ist.
Was ist wenn Du prüfst das wenn der eine Socket zum anderen sendet, und danach das weiterleiten verhinderst.
Ich hoffe ich hab jetzt verstanden was Du machen willst. Du wolltest Packete von aussen umleiten?

MfG cosmo
 
Zuletzt bearbeitet:
Code:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace ConsoleApplication1
{
	class Class1
	{
		[STAThread]
		static void Main(string[] args)
		{
			int port = 8166;
			Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
				ProtocolType.Udp);
			s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
			s.Bind(new IPEndPoint(IPAddress.Any, port));
			
			s.SendTo(Encoding.Default.GetBytes("Hallo"), new IPEndPoint(
				IPAddress.Broadcast, port));

			byte[] recv = new byte[1024];
			int count = 0;
			EndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);
			count = s.ReceiveFrom(recv, ref remoteEP);
			string recvString = Encoding.Default.GetString(recv, 0, count);
			Console.WriteLine(recvString);
			Console.Read();
		}
	}
}

Also bei mir kommt das Hallo auch wieder an.
Kein Echo?
Was dann? :(
 
Na wenn was von aussen an Socket1 ankommt soll es ja von Socket1 zu Socket2 weitergeleitet werden. Sobals es an Socket2 weitergeleitet worden ist denkt Socket2 das ein Packet von aussen angekommen ist und leitet es promt wieder an Socket1 zurück.

Du musst also prüfen, dass das ankommende Packet nicht von dem anderen Socket gesendet worden ist. Somit werden nur Packete von aussen weitergeleitet.

MfG cosmo
 
Zurück