[SOCKET] send() funktioniert nicht (was: Was ist denn nu wieder falsch?)
-
Ich bin immernoch ma IRC client dran...
Hier erstmal der code der Funzt:
int iSock::WSAStart() { WSAData wsaData; // if this doesn't work //WSAData wsaData; // then try this instead if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) { fprintf(stderr, "WSAStartup failed.\n"); exit(1); return -1; } else { printf("WSA wurde gelaunched!\n"); } // Socket starten fürs Netzwerk; if((sockSvr = socket(AF_INET, SOCK_STREAM, 0)) == -1) // STREAM socket erstellen { printf("Socket konnte nicht erstellt werden!\n"); return -1; } // Struktur füllen if((h=gethostbyname("irc.quakenet.org"))==NULL)//Addresse vom IRC Server herausbekommen! { perror("gethostbyname"); } structSvr.sin_family = AF_INET; // host byte order structSvr.sin_port = htons(MYPORT); // short, network byte order structSvr.sin_addr = *((struct in_addr *)h->h_addr); memset(&(structSvr.sin_zero), '\0', 8); // zero the rest of the struct actConnect(); } int iSock::actConnect() { if(connect(sockSvr, (struct sockaddr *)&structSvr,sizeof(struct sockaddr)) == -1) { printf("Fehler beim Socket(Line 61 iSock.cpp): %s\n",strerror(errno)); return -1; } else { printf("Verbunden mit %s\n",inet_ntoa(*((struct in_addr *)h->h_addr))); } receiving = TRUE; AfxBeginThread(recev, this); actSend(); }Dann zum empfangen ein kleiner Thread:
UINT iSock::recev(LPVOID p) { iSock * me = (iSock *)p; me->recev(); return 0; } void iSock::recev() { int numbytes; bool stop1=false; char buf[2048]; //BESATÄTIGUNG empfangen while(receiving==TRUE) { while(stop1!=true) { if ((numbytes=recv(sockSvr, buf, 2048-1, 0)) == -1) { perror("recv"); exit(1); } else { buf[numbytes] = '\0'; printf("Server:\n%s",buf); } } } }Ist nicht schön sauber gecodeetr aber das mach ich danach noch...
Anscheinen funzt das senden nicht, keine ahnung warum! Ich hab nen packetsniffer laufen, der sagt mir das es versendet wurde. Mit telnet antwortet der svr wenn ich mich JOIN #chan mache das ich mich erst regisdtrieren muss, hier scheint er mich total zu ignorieren!Send code:
int iSock::actSend() { char cUser[512]; while(stop==false) { gets(cUser); if(strcmp("quit",cUser)==0) { stop=true; closesocket(sockSvr); printf("Abbruch!\n"); } else { if(send(sockSvr,cUser,120 ,MSG_DONTROUTE|MSG_OOB) == SOCKET_ERROR) { perror("send"); } else { printf("Gesendet %s\n",cUser); }}} //FERTIG return 1; }Wäre für eure hilfe sehr dankbar!

edit:
Bitte aussagekräftige Titel verwenden: wrf
-
Könnte ein Admin das ins WinApi forum schieben? Oder irgendwohin wo mir wer helfen kann?
Hier kann es ja niemand

-
Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC mit dem Visual C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
*push*
-
chris_g schrieb:
Anscheinend funzt das senden nicht, keine ahnung warum! Ich hab nen packetsniffer laufen, der sagt mir das es versendet wurde.
Das hört sich irgendwie etwas widersprüchlich an
- kannst du das Problem nicht evtl. näher einschränken?
Und wenn du schon so viele Rückgabewert-Kontrollen drin hast: Was wird denn ausgegeben? Evtl. auch mal noch GetLastError() für nähere Infos befragen
-
Es gibt keinen Fehler... Das ist das problem!
Deswegen wird mir GetLastError(); nichts viel helfen...
Alles scheint zu funzen... Aber ich bekomm auf das Senden nichts zurück, das verwundert mich ein bisschen!
-
Hm - vielleicht schickst du nicht das, was die haben wollen

Hast du mal mit deinem Paket-Sniffer untersucht, wass bei einer funktionierenden Anwendung gesendet wird? Ich hab da aber leider ansonsten keine Ahnung
-
Aber verbinden kannste dich zum IRC-Server und du empfängst auch die MOTD ?
-
Nein ich muss ja mit dem IRC-Svr kommunizieren... Erst mnuss mal USER ... dann auf PING antworten..
Es ist das was er haben will... Genau das selbe sende ich auch per telnet wenn ich mich einfach mal connecte;
"open irc.quakenet.org 6667"
NOTICE Auth: Found hostname....
...
...
Dann ich:
JOIN #test // das ganze nur um Fehler zu erhalten(Geht beim meinem proggi //schon mal nicht)
NOTICE Auth: Register firster reagiert nichtmal auf QUIT das ist das komische...
Ich bekomme erst wieder ne message vom server wenn er wegen ping timeout trennt!
(Wenigstens geht mein Receive-Thread!)jo...

-
Du sendest bestimmt das Falsche. Da fehlt wahrscheinlich ein \n oder so am Ende des Strings. Guck dir mal das Protokoll von IRC an. Irgendwie muss der Server ja wissen, wo das "Kommando" aufhört, das du sendest.
-
Okay ich guck nochmal die RFC!
kroedler
-
Danke "\r\n" hat gefelt
