000
14.08.2003, 09:59 Uhr
~TOM
Gast
|
Hallo Leute.
Bin heute hier als Gast, weil ich mein Name und Pass verlegt habe, aber vieleicht kann mir ja einer der admins helfen und es mir wieder zuschicken auf die gleiche E-Mail wie bei der anmeldung ist aber schon ca 5 monate her.
So, mein Problem
Ich versuche grade ein Prog zuschreiben mit dem man "chatten" kann.
Funktioniert auch alles soweit wenn ich einen Server und einen Clienten habe. Aber sobald ich 2 Clienten habe, habe ich einen Runtimeerror. Das senden vom Server zu beiden (oder mehren) clienten schaffe ich schon, aber der Server nimmt keine Nachrichten vom 2. Clienten an. Der erste Client der sich angemeldet hat, kann aber mit dem Server ganznormal schreiben.
Der Runtime ist in der OnReceive() Funktion. Der Fehler heist "Unbehandelte Ausnahme in Sockets1.exe: 0xC0000005: Access Violation" Soweit ich mitbekommen habe, liegt es daran das ich daten auf einem socket empfangen soll der grade nicht auf "empfang" steht.
| C++: |
void CSockets1Dlg::OnReceive() { char *pBuf = new char[1025]; int iBufSize = 1024; int iRcvd = 0; CString strRecvd;
if (m_iType == 1) { //mein Versuch den richtigen socket rauszubekommen wo die Nachricht hin soll double vergleichsocket=0; for (int i=0;i<5;i++) {
if ((long)m_sConnectSocket[0].m_hSocket == (long)m_client[i].getclientsocket() ) { m_clientindex = i; } } } // Nachricht empfangen
iRcvd = m_sConnectSocket[m_clientindex].Receive(pBuf, iBufSize); // Wurde etwas empfangen? if (iRcvd == SOCKET_ERROR) {
} else { // Ende der Nachricht abschneiden pBuf[iRcvd] = NULL; // Nachricht in einen CString kopieren strRecvd = pBuf; // Nachricht in Listenfeld der empfangenen Nachrichten eintragen m_ctlRecvd.AddString(strRecvd); // Variablen mit den Steuerelementen synchronisieren UpdateData(FALSE); }
}
|
m_iType = die Variable mit der ich sage ob ich Server bin oder Client m_clientindex = welcher socket grade in benuzung ist. Die kommt immer bei dem Socketarray vom accept zum einsatz. m_client = variable einer selbsterstellten Klasse namens client.
| C++: |
class client { public: client (/*int standartid*/) {clientsocket=0;} ~client(){} void setclientid(int id){clientid = id;} void setclientsocket(double socket){clientsocket = socket;} int getclientid(){return clientid;} double getclientsocket(){return clientsocket;} private: int clientid; double clientsocket; };
|
Also, ich habe da jetzt schon nen bissel drin rumgeschrieben, habe aber jetzt nen Knoten im Hirn, kann also nen bissel quatsch im syntax stehen, liegt daran, dass ich noch net soviel damit zu tun hatte.
Bin für jede Hilfe dankbar.
THX TOM |