CAsyncSocket verbinden

Anfänger92

Erfahrenes Mitglied
Hallo ich habe ein Problem beim Verbinden zwischen zwei Programmen mit CAsyncSocket

Vorweg : habe es getestet mit Deaktivierter FireWall und es auch in der Firewall erlaubt.
Ich habe es auch mit diesen IP adresen ausprobiert: 127.0.0.1 , 192.168.2.2(Lan -- mein pc), loopback

Meine von CAsyncSocket abgeleitet klasse des Servers:
Code:
#include "stdafx.h"
#include "Server.h"
#include "ServerDlg.h";

#pragma once

// Socket command target

class Socket : public CAsyncSocket
{
public:
	Socket();
	virtual ~Socket();

	//Wenn Client aktzeptiert wird
	void OnAccept(int Error){
		if(Error=1){
			MessageBox(NULL,L"Fehler beim Annehmen des Benutzers",L"Fehler",MB_OK);
		}
		else{
		CServerDlg CSD;
		CSD.Aktzeptieren();
		}
	}

};

und den Code dazu in der "ServerDlg" Datei:

Code:
//Variablen
int Port=4000; //Variable die den Port speichert
int LOGL; //Speichert derzeitige länge des Logs
Socket Verbinden; //Socket zum Verbinden
Socket Daten;  //Socket zum Senden von daten

void CServerDlg::OnBnClickedStart()
{
	wLOG(L"Server starten...");
	Verbinden.Create(Port);
	Verbinden.Listen();
	wLOG(L"Server gestartet!");

}

void CServerDlg::Aktzeptieren(){
	Verbinden.Accept(Daten);
	wLOG(L"Neuer Client akzeptiert");
}

void CServerDlg::OnBnClickedStop()
{
	Verbinden.Close();	
	wLOG(L"Server gestoppt");

}

void CServerDlg::wLOG(CString Text){
...//Funktion zum schreiben eines Logs
}

Der Port im Clienten ist auch auf 4000 eingestellt.

Ich poste jetzt nur den Code Des Server's Da der Fehler beim Aktzeptieren geschiet.
Ich mach da i-etwas falsch. Die Funktion OnAccept() liefert immer 1 zurück ... was wie ich gehört habe heißt das ein Fehler aufgetreten ist

Bin noch neu in MFC und Sockets. Is bestimmt i-eine Kleinigkeit.
 
Zuletzt bearbeitet:
Hallo,

wenn du schreibst
Code:
if(Error=1){
machst du den klassischen Anfängerfehler, indem du Error den Wert 1 zuweist.
Richtig wäre
Code:
if(Error==1){

Mfg

langer
 
Oha ... das war wirklich ein dummer Fehler.
Schande über mich eig müsste ich das ja aus reinem c++ kennen.
Naja habs jetzt mal versucht.

Mein Client Meldet auch das er Verbunden ist,
der Server stürtzt aber ab.
VS zeigt mir folgenden Code Ausschnitt:

Code:
BOOL CAsyncSocket::Accept(CAsyncSocket& rConnectedSocket,
	SOCKADDR* lpSockAddr, int* lpSockAddrLen)
{
	ASSERT(rConnectedSocket.m_hSocket == INVALID_SOCKET);
	ASSERT(CAsyncSocket::FromHandle(INVALID_SOCKET) == NULL);

	CAsyncSocket::AttachHandle(INVALID_SOCKET, &rConnectedSocket);
	if (CAsyncSocket::FromHandle(INVALID_SOCKET) == NULL)
	{
		// AttachHandle Call has failed
		return FALSE;
	}
...
(Der Teil wo der Fehler auftritt ist hervorgehoben)

und Folgende Fehlermeldung:(Anhang)

Edit: Ich denke es könnte sein das es an meinem Funktionsaufruf liegt:

Code:
void OnAccept(int Error){
                 if(Error==1){
		MessageBox(NULL,L"Fehler beim Annehmen des Benutzers",L"Fehler",MB_OK);
	}
	else{
		CServerDlg CSD;
		CSD.Aktzeptieren();
	}	
}
 

Anhänge

  • Fehler.jpg
    Fehler.jpg
    20,6 KB · Aufrufe: 16
Zuletzt bearbeitet:
Ok jetzt weiß ich genau das er hierran liegt:
Code:
void CServerDlg::Aktzeptieren()
{
	m_ConnectedSocket.Accept(Daten);
	...
}

aber wie behebe ich den Fehler. Ich muss den Verbunden Socket ja in nen neuen eintragen um daten zu senden und zu Empfangen oder
 
Habe meinen Fehler gefunden:
Habe beim Initzialisieren den Socket dem der Client zugewiesen werden soll Erstellt.
:mad: TRotzdem Danke an langer1801.
 

Neue Beiträge

Zurück