Hallo nochmal
immernoch mit embedded Visual C++ SP4 versuche ich gerade einen Hostnamen aufzulösen. Per ping-Befehl in der Konsole konnte der Hostname aufgelöst werden, aber wenn ich den Debugger starte wird mir rc==0 ausgegeben, aber WSAGetLastError liefert 10093, was so viel heist wie WSAStartup() wurde nich ausgeführt, war fehlerhaft, etwas an der Netzwerkkonfiguration ist falsch, oder WSACleanup() wurde zu oft ausgeführt. Ich habe eher bedenken dass es bei mir ein Versionsproblem ist.
- #include "stdafx.h"
- #include "Scannerclient.h"
- #include "ScannerclientDlg.h"
- #include "string.h"
- #include "winsock.h"
- #include "windows.h"
- #include "atlconv.h"
- ....
- int startWinSock(void);
- ....
- void CScannerclientDlg::OnButtonAbschicken()
- {
- USES_CONVERSION;
- CString cs_eingabe, cs_hostname(""), cs_port(""), cs_debug;
- long rc;
- char buf[1024];
- SOCKET socket1;
- SOCKADDR_IN addr;
- HOSTENT *he;
- DWORD dw_Error;
- ....
- rc=startWinSock();
- AfxSocketInit();
- he=gethostbyname(T2A(cs_hostname));
- if (he==NULL)
- {
- dw_Error=WSAGetLastError();
- }
- WSACleanup();
- }
- ....
- }
- int startWinSock(void)
- {
- WSADATA wsa;
- return WSAStartup(MAKEWORD(2,2), &wsa);
- }
Das kuriose ist eben, dass ich bei dem device die winsock.h und nicht winsock2.h nutze. Wenn ich die Winsock2.h inkludiere kommen 20 fehler und 19 Warnungen (sollte Bedarf bestehen kann ich diese sogar posten). Nun habe ich schon verschiedene Versionen des WinSock probiert (MAKEWORD(1,0 ... 1.1 ... 2.0 .... 2.2. In der Hilfe zu WSAStartup wird auf 2.2 eingegangen, allerdings inkludieren die in dem Codebeispiel die winsock2.h. Diese ist auch vorhanden, die ws2.lib habe ich gelinkt, aber wie gesagt, nutze ich die winsock2.h gibt es massig Fehler.
Weis zufällig jemand Rat? Im Internet habe ich leider nix brauchbares gefunden (google, msdn)
Gruß Basti
//edit:
Dieses kleine Progrämmchen läuft ohne Probleme:
- #include <windows>
- #include <winsock2>
- #include <stdio>
- //Prototypen
- int startWinsock(void);
- int main()
- {
- long rc;
- SOCKET s;
- SOCKADDR_IN addr;
- char buf[256];
- // Winsock starten
- rc=startWinsock();
- if(rc!=0)
- {
- printf("Fehler: startWinsock, fehler code: %d\n",rc);
- return 1;
- }
- else
- {
- printf("Winsock gestartet!\n");
- }
- // Socket erstellen
- s=socket(AF_INET,SOCK_STREAM,0);
- if(s==INVALID_SOCKET)
- {
- printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());
- return 1;
- }
- else
- {
- printf("Socket erstellt!\n");
- }
- // Verbinden
- memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten
- addr.sin_family=AF_INET;
- addr.sin_port=htons(12345); // wir verwenden mal port 12345
- addr.sin_addr.s_addr=inet_addr("127.0.0.1"); // zielrechner ist unser eigener
- rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
- if(rc==SOCKET_ERROR)
- {
- printf("Fehler: connect gescheitert, fehler code: %d\n",WSAGetLastError());
- return 1;
- }
- else
- {
- printf("Verbunden mit 127.0.0.1..\n");
- }
- // Daten austauschen
- while(rc!=SOCKET_ERROR)
- {
- printf("\nZeichenfolge eingeben [max 256]: ");
- gets(buf);
- send(s,buf,strlen(buf),0);
- rc=recv(s,buf,256,0);
- if(rc==0)
- {
- printf("Server hat die Verbindung getrennt..\n");
- break;
- }
- if(rc==SOCKET_ERROR)
- {
- printf("Fehler: recv, fehler code: %d\n",WSAGetLastError());
- break;
- }
- buf[rc]='\0';
- printf("\nServer antwortet: %s\n",buf);
- }
- closesocket(s);
- WSACleanup();
- return 0;
- }
- int startWinsock(void)
- {
- WSADATA wsa;
- return WSAStartup(MAKEWORD(2,0),&wsa);
- }
UNd das sind aber die Fehler, wenn ich die winsock2.h und WinSock Version 2.2 nutze:
- --------------------Configuration: Scannerclient - Win32 (WCE ARMV4I) Debug--------------------
- Compiling...
- ScannerclientDlg.cpp
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(113) : error C2011: 'fd_set' : 'struct' type redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(133) : warning C4005: 'FD_CLR' : macro redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock.h(123) : see previous definition of 'FD_CLR'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(148) : warning C4005: 'FD_SET' : macro redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock.h(129) : see previous definition of 'FD_SET'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(157) : error C2011: 'timeval' : 'struct' type redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(183) : warning C4005: 'IOCPARM_MASK' : macro redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock.h(164) : see previous definition of 'IOCPARM_MASK'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(190) : warning C4005: '_IO' : macro redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock.h(172) : see previous definition of '_IO'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(192) : warning C4005: '_IOR' : macro redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock.h(173) : see previous definition of '_IOR'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(194) : warning C4005: '_IOW' : macro redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock.h(174) : see previous definition of '_IOW'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(213) : error C2011: 'hostent' : 'struct' type redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(226) : error C2011: 'netent' : 'struct' type redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(233) : error C2011: 'servent' : 'struct' type redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(245) : error C2011: 'protoent' : 'struct' type redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(262) : warning C4005: 'IPPROTO_GGP' : macro redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock.h(239) : see previous definition of 'IPPROTO_GGP'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(331) : error C2011: 'in_addr' : 'struct' type redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(389) : error C2011: 'sockaddr_in' : 'struct' type redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(399) : error C2011: 'WSAData' : 'struct' type redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(459) : warning C4005: 'SO_DONTLINGER' : macro redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock.h(437) : see previous definition of 'SO_DONTLINGER'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(516) : warning C4005: 'AF_IPX' : macro redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock.h(488) : see previous definition of 'AF_IPX'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(556) : warning C4005: 'AF_MAX' : macro redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock.h(505) : see previous definition of 'AF_MAX'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(562) : error C2011: 'sockaddr' : 'struct' type redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(602) : error C2011: 'sockproto' : 'struct' type redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(641) : error C2011: 'linger' : 'struct' type redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(654) : warning C4005: 'SOMAXCONN' : macro redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock.h(566) : see previous definition of 'SOMAXCONN'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(679) : warning C4005: 'FD_READ' : macro redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock.h(584) : see previous definition of 'FD_READ'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(682) : warning C4005: 'FD_WRITE' : macro redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock.h(585) : see previous definition of 'FD_WRITE'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(685) : warning C4005: 'FD_OOB' : macro redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock.h(586) : see previous definition of 'FD_OOB'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(688) : warning C4005: 'FD_ACCEPT' : macro redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock.h(587) : see previous definition of 'FD_ACCEPT'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(691) : warning C4005: 'FD_CONNECT' : macro redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock.h(588) : see previous definition of 'FD_CONNECT'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(694) : warning C4005: 'FD_CLOSE' : macro redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock.h(589) : see previous definition of 'FD_CLOSE'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(893) : warning C4005: 'h_errno' : macro redefinition
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock.h(702) : see previous definition of 'h_errno'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(2250) : error C2059: syntax error : '('
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(2268) : warning C4002: too many actual parameters for macro 'WSACleanup'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(2268) : error C2059: syntax error : '('
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(2285) : error C2733: second C linkage of overloaded function 'SetLastError' not allowed
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(2285) : see declaration of 'SetLastError'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(2302) : warning C4002: too many actual parameters for macro 'WSAGetLastError'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(2302) : error C2556: 'int __cdecl GetLastError(void)' : overloaded function differs only by return type from 'unsigned long __cdecl GetLastError(void)'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winbase.h(1938) : see declaration of 'GetLastError'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(2302) : error C2371: 'GetLastError' : redefinition; different basic types
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winbase.h(1938) : see declaration of 'GetLastError'
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(2913) : error C2733: second C linkage of overloaded function 'WSAIoctl' not allowed
- c:\programme\windows ce tools\wce420\datalogic-net\include\armv4i\winsock2.h(2903) : see declaration of 'WSAIoctl'
- C:\Dokumente und Einstellungen\stephan\Eigene Dateien\VC++ SP4\Scannerclient\ScannerclientDlg.cpp(107) : error C2440: '=' : cannot convert from 'unsigned long (__cdecl *)(void)' to 'unsigned long'
- This conversion requires a reinterpret_cast, a C-style cast or function-style cast
- Error executing clarm.exe.
- ScannerclientDlg.obj - 19 error(s), 20 warning(s)