CAsyncSocket Übertragungsproblem
-
Hi,
ich habe mal versucht mich selbst mit Socketprogrammierung zu beschäftigen. Ich habe jetzt schonmal folgendes gemacht:
//WinMsgDlg.cpp // //Bei empfangen von Daten void CWinMsgDlg::OnReceive(int nErrorCode) { char *buf=""; sock->Receive(buf,1024); MessageBox(buf,"hi",MB_OK); } //Verbindungsüberprüfung void CWinMsgDlg::OnConnect(int nErrorCode) { if(nErrorCode) { switch(nErrorCode) { [...] } } else MessageBox("Verbindung hergestellt","Erfolg",MB_OK); } //Verbindung erlauben void CWinMsgDlg::OnAccept(int nErrorCode) { sock->Accept(connecter); } //An port m_port hören void CWinMsgDlg::OnBnClickedListen() { UpdateData(true); CButton *listen=(CButton*)GetDlgItem(ID_LISTEN); CButton *send=(CButton*)GetDlgItem(ID_SEND); //Socket öffnen und hören CString buf=""; listen->GetWindowText(buf); if(!strcmp(buf.GetBuffer(),"Listen")) { sock->Create(atoi(m_port.GetBuffer()),SOCK_STREAM); sock->Listen(); listen->SetWindowText("Stopp"); send->EnableWindow(false); } else { if(strcmp(buf.GetBuffer(),"Stopp")==0) { sock->Close(); listen->SetWindowText("Listen"); send->EnableWindow(true); } } buf.ReleaseBuffer(); m_port.ReleaseBuffer(); UpdateData(false); } //String an Server senden void CWinMsgDlg::OnBnClickedSend() { UpdateData(true); //Verbindung herstellen und Text senden sock->Create(atoi(m_port.GetBuffer()),SOCK_STREAM); sock->Connect((LPCTSTR)m_ip.GetBuffer(),atoi(m_port.GetBuffer())); sock->Send(m_message.GetBuffer(),sizeof(m_message.GetBuffer())); sock->Close(); m_ip.ReleaseBuffer(); m_port.ReleaseBuffer(); m_message.ReleaseBuffer(); UpdateData(false); } //Sockets.cpp // void CMsgAsyncSock::SetParent(HWND hWnd) { m_parent=hWnd; } //Ausführen beim Empfangen von Daten void CMsgAsyncSock::OnReceive(int nErrorCode) { ((CWinMsgDlg*)m_parent)->OnReceive(nErrorCode); //Dispatchen CAsyncSocket::OnReceive(nErrorCode); } //Ausführen bei eingehender Verbindung void CMsgAsyncSock::OnConnect(int nErrorCode) { ((CWinMsgDlg*)m_parent)->OnConnect(nErrorCode); //Dispatchen CAsyncSocket::OnConnect(nErrorCode); } //Ausführen bei Acceptanfrage void CMsgAsyncSock::OnAccept(int nErrorCode) { ((CWinMsgDlg*)m_parent)->OnAccept(nErrorCode); //Dispatchen CAsyncSocket::OnAccept(nErrorCode); }
Das Problem ist jetzt folgendes:
Wenn ich jetzt Daten versenden will, ist beim ersten mal scheinbar alles ok.
Allerdings gibt send komischerweise immer, also unabhängig von dem Zeugs das ich ihm übergebe, 4 zurück. Am Server tut sich auch nichts, beim Debuggen hab ich bemerkt, dass OnReceive anscheinend gar nicht ausgelöst wird.
Beim zweiten mal ist es jetzt so, dass send -1 zurückgibt und ich beim Server einen error bekomme (Debug Assertion Failure oder sowas, kanns gerade nicht testen).Kann mir jemand sagen woran das liegt / was ich falsch gemacht habe?
Schon mal danke im Voraus.mfg aaaabyx
-
Kann mir wirlich niemand helfen?
-
Du könntest mal dein Programm zum Download bereitstellen. Ich schaue mir nicht gerne soviel SOurce hier im Forum an. Da übersieht man auch gerne eine Fehler.
-
-
sizeof(m_message.GetBuffer()) ist wahrscheinlich immer 4.
-
Danke, damit wär schon mal 1 Problem gelöst.
-
*schieb*
-
wow, der Puffer in OnReceive ist ja richtig groß. ;-))
-
Hm ja ups hehe weiss auch nicht wie ich dadrauf gekommen bin :>
Is allerdings eher weniger das Problem da OnReceive ja nichtmal aufgerufen wird
-
Kommt schon einer muss mir doch helfen können
-
Hier wird dir keiner mehr helfen.
-
Wofür ist das Forum denn dann da...
-
Hier kennt sich niemand mit CAsyncSocket aus.
-
Na wenn du meinst, glaub ich aber inzwischen auch schon fast... Obwohl das eigentlich doch gar nicht sein kann...
-
Es gibt auf der Welt nur sehr wenige Menschen die sich mit der CAsyncSocket Klasse auskennen.
-
Nebenbei: Die MFC Socket Klassen werden auch sehr selten verwendet
-
Nach langer zeit mal wieder da, stimmts Rapha ?
-
Warum sollte ich auch. Ich habe dich ersucht dein Programm hochzuladen.
Das hast du auch gemacht aber es ist so nicht kompilierbar.Warum? Finde es selbst heraus.
-
.°°. schrieb:
Nach langer zeit mal wieder da, stimmts Rapha ?
Jo, bin nach nem etwas längeren Abstecher nach PHP, Assembler und c endlich wieder bei C++ gelandet
-
Unix-Tom schrieb:
Das hast du auch gemacht aber es ist so nicht kompilierbar.
Entschuldigung ich dachte dafür gibts die Antwort-Funktion. Naja bitte