2012-04-01 12 views
2

Ich versuche, Daten von meiner Schnittstelle, geschrieben in c, zu einer anderen Anwendung in C#.Verwenden von WinSocks in C, um Daten an aC# -Anwendung auf demselben Computer zu senden, "Zielhostverweigerung connectiong (C# part)

Jetzt

, ich bin nicht sicher, ob Winsocks rein c ist, aber ich bin mit Visual Studio und den Rest meiner Schnittstelle ist 100% reines C.

Hier ist mein „Client“ geschrieben in C#

http://pastebin.com/X9SNcVqn

hier ist mein "Server" in C - Schleifen geschrieben Warten auf eine Verbindung, das baut und läuft ohne Probleme

HINWEIS: DEFAULT_PORT ist 18042, verwendet den gleichen Anschluss für Client-und Server-Seite.

Ich habe wireshark heruntergeladen und verwendet den Befehl „tcp.port eq“

http://pastebin.com/FHZyre2V

Ich habe auch versucht, durch meine Windows-Firewall und NORTON gehen diese Verbindung zu ermöglichen, konnte ich nicht herausfinden, was machen. Die meisten Tuts, die ich sah, wo veraltet und Registerkarten und Optionen in WINDOWS geändert werden

Ich wählte einen Port, der nicht verwendet wurde, versuchte ich mit wireshark, um die Verbindungen zu sehen, kein Glück, aber ich überprüfte den Port, den ich verwendete mit nmap, vor und nach dem ich den „Server“ lief, so muss es von atleast haben

+0

Können Sie mit dem Server verbinden? Kann Ihr Client eine Verbindung zu einem 'nc -l' Server herstellen? – sarnold

+0

Der "Server" und der "Client" befinden sich auf demselben Computer. Ich weiß nicht, ob ich 127.0.0.1 oder 192.168.1.4 (meine IP) verwenden soll. Ich habe versucht, mithilfe von Putty mit 192.168.1.4 über den Port, den ich in meinem Code verwendet, zu verbinden, und es wurde abgelehnt. –

Antwort

1

In Ihrem C# -Code Sie Objekte TcpClient und Socket mischen . Du brauchst nicht beides, nur den TcpClient. (Der Socket-Code verwendet auch den falschen Port). Wenn das TcpClient-Objekt verbunden ist, rufen Sie die GetStream-Methode auf, um ein NetworkStream-Objekt abzurufen, das Sie lesen und beschreiben können, um Daten an den Serverprozess zu senden und zu empfangen.

Siehe Beispiel-Code in der Dokumentation, hier: mit einem beliebigen anderen Werkzeug wie `telnet` oder` nc` http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.aspx

0

Ihr Client-Code enthält erstellt wurde:

IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("192.168.1.4"), 18041); 

ich würde nicht unbedingt erwarten, dass die IP-Adresse gebunden an eine Netzwerkkarte unbedingt für localhost-zu-localhost-Verbindungen arbeiten. Ich würde empfehlen, Ihren Client zu ändern, um 127.0.0.1 oder eine andere geeignete Loopback-Adresse zu verwenden.

+0

Ich benutzte das, aber dann habe ich nur die IP in die Connect-Funktion fest programmiert. 'clientSocket.Connect (" 127.0.0.1 ", 9997);' –

0

Überprüfen Sie zunächst, ob die IP-Adresse korrekt ist und ob der entsprechende Port gehört.

netstat -an | find "port number"

und ich denke, in der Server-Seite Code

local.sin_port = (unsigned short)DEFAULT_PORT;

werden sollten:

local.sin_port = htons((unsigned short)DEFAULT_PORT);