Laden...

Fehler: System.Net.Sockets.SocketException (0x80004006)

Erstellt von kljg98 vor 9 Jahren Letzter Beitrag vor 9 Jahren 7.726 Views
K
kljg98 Themenstarter:in
4 Beiträge seit 2015
vor 9 Jahren
Fehler: System.Net.Sockets.SocketException (0x80004006)

Hallo zusammen,

ich habe folgendes Problem: Ich möchte mit c# einen einfachen Netzwerk-Chat programmieren. Hierzu nahm ich ein Video-Tutorial zur Hilfe (https://www.youtube.com/watch?v=ObcGBT4ZWEU). N
Nach Fertigstellung des Programms und Debugging ohne Fehler kam nach dem Versuch des Verbindungsaufbaus folgende Fehlermeldung:> Fehlermeldung:

System.Net.Sockets.SocketException (0x0004005): Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte 192.168.2.125:81 bei System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshop, Socket Adress socketAdress) bei System.Net.Sockets.Socket.Connect(EndPoint remoteEP) bei ChatClient.Form1.buttonVerbindung_Click(Pbject sender, EventArgs e) in c:[...]

Hier ist der Quellcode:

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Net;
using System.Net.Sockets;

namespace ChatClient
{
    public partial class Form1 : Form
    {
        Socket sck;
        EndPoint epLocal, epRemote;
        public Form1()
        {
            InitializeComponent();

            sck = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            sck.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

            textIP1.Text = GetLocalIP();
            textIP2.Text = GetLocalIP();
        
        }

        private string GetLocalIP()
        {
            IPHostEntry host;
            host = Dns.GetHostEntry(Dns.GetHostName());

            foreach (IPAddress ip in host.AddressList)
            {
                if (ip.AddressFamily == AddressFamily.InterNetwork)
                {
                    return ip.ToString();
                }
            }

            return "127.0.0.1";

        }
        
        private void MessageCallBack(IAsyncResult aResult)
        {
            try
            {
                int size = sck.EndReceiveFrom(aResult, ref epRemote);
                if (size > 0)
                {
                    byte[] receivedData = new byte[1464];

                    receivedData = (byte[])aResult.AsyncState;

                    ASCIIEncoding eEncoding = new ASCIIEncoding();
                    string receivedMessage = eEncoding.GetString(receivedData);
                    listVerlauf.Items.Add("Partner:" + receivedMessage);
                }

                byte[] buffer = new byte[1500];
                sck.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref epRemote, new AsyncCallback(MessageCallBack), buffer);

            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.ToString());
            }
        }


        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void label3_Click(object sender, EventArgs e)
        {

        }

        private void buttonVerbindung_Click(object sender, EventArgs e)
        {
            try
            {
                epLocal = new IPEndPoint(IPAddress.Parse(textIP1.Text), Convert.ToInt32(textPort1.Text));
                sck.Bind(epLocal);

                epRemote = new IPEndPoint(IPAddress.Parse(textIP2.Text), Convert.ToInt32(textPort2.Text));
                sck.Connect(epRemote);

                byte[] buffer = new byte[1500];
                sck.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref epRemote, new AsyncCallback(MessageCallBack), buffer);

                buttonVerbindung.Text = "Verbunden";
                buttonVerbindung.Enabled = false;
                buttonSenden.Enabled = true;

                textNachricht.Focus();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void buttonSenden_Click(object sender, EventArgs e)
        {

            try
            {
                System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
                byte[] msg = new byte [1500];
                msg = enc.GetBytes(textNachricht.Text);

                sck.Send(msg);

                listVerlauf.Items.Add("Ich: " + textNachricht.Text);
                textNachricht.Clear();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

        }

        private void textNachricht_TextChanged(object sender, EventArgs e)
        {

        }

        private void listVerlauf_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}

Ich würde mich sehr über Eure Hilfe freuen.

Gruss kljg98

463 Beiträge seit 2009
vor 9 Jahren

Ich nehme an, dass deine Firewall den Zugriff blockt.

K
kljg98 Themenstarter:in
4 Beiträge seit 2015
vor 9 Jahren

Vielen Dank für die Antwort!

An der Firewall liegts leider nicht. Habe ich bereits schon einmal komplett deaktiviert und es ging trotzdem nicht.
Ich habe es auch schon erfolglos mit anderen Ports über 1024 versucht...

16.835 Beiträge seit 2008
vor 9 Jahren

Port 81 ist reserviert. Was willst Du dann auf der IP 192.168.2.125 ansprechen?
Für mich hört sich das so an, dass entweder der andere PC ne Firewall hat oder der Port 81 auf diesem Rechner einfach nicht mit irgendeiner Applikation verbunden ist.
Dass die eigene Firewall ausgehende TCP Anfragen blockt ist eher unüblich; das glaube ich nicht.

K
kljg98 Themenstarter:in
4 Beiträge seit 2015
vor 9 Jahren

Mhh, ich habe es jetzt nochmal an einem anderen Rechner mit Windows 7 probiert (ich habe Windows 8, tut aber eigentlich auch nichts zur Sache)

Jedenfalls geht es auf dem anderen Computer. Obwohl ich jetzt meine Firewall abgestellt habe, kann ich trotzdem keine Verbindung herstellen. Ich bin gerade leicht verwirrt...

K
kljg98 Themenstarter:in
4 Beiträge seit 2015
vor 9 Jahren

Also, ich habe jetz ausgeschlossen, dass ein Fehler im Programm vorliegt. Auf einem anderen Computer kann ich problemlos chatten. Demzufolge stimmt etwas mit dem Computer nicht.
Ich habe jetzt alles versucht, was mir eingefallen ist. Firewall komplett deaktiviert, obwohl ich zuvor für dieses Programm den Zugriff zugelassen habe. Sogar das AntiViren-Programm habe ich deinstalliert. Ich nehme auch immer Ports um die 8000 rum, die eigentlich nicht belegt sein sollten. Hat irgendjemand noch einen Tipp?

P
157 Beiträge seit 2010
vor 9 Jahren

Du benutzt DGram/Udp versuch spaßeshalber mal die Codezeile

sck.Connect(epRemote);

zu löschen.
Dann musst du die Codezeile


 sck.Send(msg);

durch


 sck.SendTo(msg,new IPEndPoint(IPAddress.Parse(textIP2.Text), Convert.ToInt32(textPort2.Text)));

ersetzen.
Ich hatte es schon, dass durch ein Verlagerung der Problematischen Codezeile ein anderer Fehler generiert wird. Warum es bei deinem Rechner nicht funktioniert, kann ich dir nicht sagen. Was für ein BS oder Antiviren Programm / Firewall nutzt du?