kleines Socketproblem



  • Hallo
    bin jetz irgendwie gerade dabei etwas Barcodegescanntes "Hostname:Port" so ein bisschen auseinanderzunehmen und dann eine tcpip-verbindung dahin zu erstellen per winsocket. Bekomme nun aber wieder einige fehler bei denen ich nicht genau weis woher sie kommen. Leider muss ich recht zielorientiert arbeiten und habe vorher mit c/c++ noch nicht wirklich viel erfahrung machen können, aber es wäre nett wenn ich ein paar Hinweise/Hilfen bekomme 🙂
    Es is bis jetz eher noch testcode, kaum fehlerbehandlungen usw:

    void CScannerclient2Dlg::OnButton1() 
    {
    	long rc;
    	CString strText,str2Text; 
    	char host[20], port[6],buff[256];
    	SOCKET socket1;
    	SOCKADDR_IN addr;
    	CStatic* pCtlStatic = NULL; 
    	int i(0),j(0);
        HOSTENT* he;
    
    	m_Edit2.GetLine(0, strText.GetBuffer(m_Edit2.LineLength(0)));
    	//strcpy(eingabe,strText);
    	//eingabe=strText;
    	int pos = strText.Find(':');
    	if (pos!=-1)
    		{
    		 for (i=0;i<=pos;i++) {host[i]=strText[i];}
    		 for (i=pos,j=0;i=(strText.GetLength());i++,j++) {port[j]=strText[i];}
    		}
    	else
    	{		};
    	he=gethostbyname(host);
    	memcpy(&(addr->sin_addr),he->h_addr_list[0],4);
    	buff[0]=("Hallo");
    	rc=startWinSock();
    	socket1=socket(AF_INET,SOCK_STREAM,0);
    	memset(&addr,0,sizeof(SOCKADDR_IN));
    	addr.sin_family=AF_INET;
    	addr.sin_port=htons(atoi(port));
    	addr.sin_addr.s_addr=inet_addr(host);
    	rc=connect(socket1,(SOCKADDR*)&addr,sizeof(SOCKADDR));
    	send(socket1,buff,1024,0);
    	closesocket(socket1);
    	WSACleanup();
    

    Fehler sind folgende (beziehen sich auf Zeile 25 und 26):
    C:\Dokumente und Einstellungen\stephan\Eigene Dateien\VC++ SP4\scannerclient2\scannerclient2Dlg.cpp(96) : error C2819: type 'sockaddr_in' does not have an overloaded member 'operator ->'
    c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock.h(355) : see declaration of 'sockaddr_in'
    C:\Dokumente und Einstellungen\stephan\Eigene Dateien\VC++ SP4\scannerclient2\scannerclient2Dlg.cpp(96) : error C2227: left of '->sin_addr' must point to class/struct/union
    C:\Dokumente und Einstellungen\stephan\Eigene Dateien\VC++ SP4\scannerclient2\scannerclient2Dlg.cpp(97) : error C2440: '=' : cannot convert from 'char [6]' to 'char'
    This conversion requires a reinterpret_cast, a C-style cast or function-style cast

    Gruß Basti



  • Die ersten beiden Meldungen beziehen sich darauf, daß du eine blanke struct hast und keinen Zeiger auf eine struct - und da geht der Elementzugriff mit . (Punkt) statt ->.

    Die dritte Meldung bedeutet, daß man in einen einzelnen char kein String-Literal kopieren kann, sondern nur char-Literale. (ich nehme an, du willst, das Array mit dem Text auffüllen - dazu brauchst du strcpy())



  • cool danke
    habe den code nun soweit verändert:
    memcpy(&(addr.sin_addr),he.h_addr_list[0],4);
    strcpy(buff,"Hallo");

    nur nun meckert der compiler noch am he... rum, ich habe diesen einen Befehl nur aus einem Tut gezogen

    C:\Dokumente und Einstellungen\stephan\Eigene Dateien\VC++ SP4\scannerclient2\scannerclient2Dlg.cpp(96) : error C2228: left of '.h_addr_list' must have class/struct/union type



  • 'he' ist nun wiederum ein Zeiger und muß dereferenziert werden (also (*he).h_addr_list bzw. he->h_addr_list ) 😉

    (PS: Ich bin zwar normalerweise kein Verfechter der ungarischen Notation, aber bei dir wäre sie vermutlich hilfreich ;))



  • ok, hab es nun compiled bekommen. dasses ein zeiger war wusste ich ja soweit, aber das was ich heute in dem Buch gelesen habe über Zeiger, KLassen und structs is anscheinend noch nicht so verinnerlicht ^^
    Vielen Dank nochmal 🙂

    Mal schaun wie ich jetzt mal ein paar Ausgaben machen kann auf meine Form, um zu guggen, ob der auch mit den Variablen das macht was er soll. Um z.B. static text zu editieren hab ich ja schon was eingebaut, aber ich weis nicht, wie man das mit dem Handler für den This zeiger macht 😞
    Gruß Basti


Anmelden zum Antworten