Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 18:33

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



c++ bot winsocks

Discussion on c++ bot winsocks within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Mar 2009
Posts: 20
Received Thanks: 0
c++ bot winsocks

hay,
wie schon in einem anderen thema gepostet, würde ich gerne einen bot für flyff programmieren -> habe mich ein wenig eingelesen und bin jetzt von der idee abgekommen, weil ich wohl EINDEUTIG nicht annehernd genug erfahrung habe um so etwas in c++ realisieren.

Deswegen habe ich beschlossen einen Browsergamebot o.ä. mit c++ zu erstellen, sodass ich wenigstens ein bisschen umgang mit winsocks habe.

Ich habe mir eine grafische oberfläche mit der winapi erstellt(und das hat welch wunder auch funktioniert!).
Danach habe ich mich in der msdn und verschiedenen foren(ich benutze kein mvc/vc++ express) über winsocks informiert.
Per button click rufe ich diese funktion auf:
->der pc soll nur eine verbindung auf bauen
Code:
BOOL setupConnection(HWND hWnd,SOCKET sock){
	const char szIPAddr[32] = {"178.63.1.69"};
	static struct sockaddr_in sa;
	WSADATA WSAData;
	int iError;
	if(iError = WSAStartup(MAKEWORD(2,0),&WSAData)){
		MessageBox(0,_T("FEHLER bei WSAStartup"),0,0);
		return true;
	}else{
		MessageBox(0,_T("WSA erfolgreich gestartet"),0,0);
	}
	//open socket
	sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	if(sock == INVALID_SOCKET){
		MessageBox(0,_T("Socket error...."),0,0);
		closesocket(sock);
		WSACleanup();
		return true;
	}else{
		MessageBox(0,_T("Socket steht"),0,0);
	}
	//async hinzufügen-> block stoppen
	if(SOCKET_ERROR == WSAAsyncSelect(sock,hWnd,WM_SOCKET_NOTIFY,FD_CONNECT|FD_READ)){
		MessageBox(0,_T("Async error...."),0,0);
		closesocket(sock);
		WSACleanup();
	}
	//connect
	sockaddr_in service; 
	sa.sin_family	=AF_INET;
	sa.sin_port		=(80);
	sa.sin_addr.S_un.S_addr =inet_addr(szIPAddr);
	connect(sock,(SOCKADDR*)&sa,sizeof(sa));
	if(WSAEWOULDBLOCK != (iError = WSAGetLastError())){
		MessageBox(0,_T("Connect error...."),0,0);
		closesocket(sock);
		WSACleanup();
		return true;
	}
	return true;
}
ich bin mir nich sicht aber ich glaube das funktioniert auch?
Hier wäre meine frage, wie kann ich das richtig in unicode umsetzen?
Code:
const char szIPAddr[32] = {"178.63.1.69"};
wäre dann doch:
Code:
const TCHAR szIPAddr[32] = _T("178.63.1.69");
?
//egal das ist jetzt eher nebensächlich
laut msdn wird dann in WM_SOCKET_NOTIFY, FD_CONNECT ausgelöst.-> das kann icha uch bestätigen
Code:
case WM_SOCKET_NOTIFY:
		WORD wEvent,wError;
		wEvent = WSAGETSELECTEVENT(lParam);//events
		wError = WSAGETSELECTERROR(lParam);//errors
		switch(wEvent){
			case FD_CONNECT:
				if(wError){
					MessageBox(0,_T("Connect error"),0,0);
					return true;
				}else{
					MessageBox(0,_T("Verbunden"),0,0);
				}
				recv(sock,(char*)&response,100,MSG_PEEK);
				break;
leider bekomme ich aber immer nen connect error ...
jmd ne idee woran das liegen könnte?
-> die ip existiert
MfG Lukas
luckylukas92 is offline  
Old 05/01/2011, 19:00   #2
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Da du nach eigenen Angaben C++ verwendest, rate ich dringend zum Umgang mit std::wstring. Damit hast du dein unicode Problem elegant und einfach gelöst, als dass du dich da mit den ollen C-Strings abrackerst:

Quote:
std::wstring ip = L"178.63.1.69";
//...
sa.sin_addr.S_un.S_addr =inet_addr(ip.c_str());
EDIT: Nochmal zum Thema C++ und Network-Programmierung: Ich kann durchaus auch Boost::Asio empfehlen, dann musst du dich nicht mit den C-Funktionen der WinSock herumschlagen.
xNopex is offline  
Old 05/01/2011, 19:41   #3
 
elite*gold: 0
Join Date: Mar 2009
Posts: 20
Received Thanks: 0
Hallo,
mein problem bestand eher im 2ten teil des posts :P, und nein ich möchte nicht auf andere libs umsteigen ... irgendwie muss es ja so gehen:
und
Quote:
std::wstring ip = L"178.63.1.69";
//...
sa.sin_addr.S_un.S_addr =inet_addr(ip.c_str());
so geht es leider nicht->
Error: "error C2664: 'inet_addr': Konvertierung des Parameters 1 von 'const wchar_t *' in 'const char *' nicht möglich"
trotzdem danke für die hilfe
MfG lukas
luckylukas92 is offline  
Old 05/01/2011, 20:00   #4
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Quote:
Error: "error C2664: 'inet_addr': Konvertierung des Parameters 1 von 'const wchar_t *' in 'const char *' nicht möglich"
>>

Die Funktion nimmt also nur einen ASCII - String entgegen, wie mir gerade aufgefallen ist. Du müsstest den String daher wieder zurück ins ASCII Format bringen und da stellt mir die Frage, wieso du überhaupt auf UNICODE umsteigen möchtest... Und ich hatte das so verstanden, dass der zweite Teil eher nebensächlich ist Aber gut..
Schau doch mal, was GetLastError() sagt.
xNopex is offline  
Old 05/01/2011, 23:24   #5
 
elite*gold: 0
Join Date: Mar 2009
Posts: 20
Received Thanks: 0
ich möchte nicht auf unicode umsteigen -> habe mit der winapi/c++ bis jetzt erelativ wenig am hut gehabt und wollte gleich mit unicode anfangen...
GetLastError() habe ich shcon bemüht
... aber auch das ist keine Unicode funktion und ich bin mir nicht sicher , ob es evtl am falschen cast liegt, dass
MessageBox(0,(LPCWSTR),0,0); nichts liefert, bzw. eine leere messagebox

MfG Lukas
luckylukas92 is offline  
Old 05/02/2011, 15:52   #6
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Get Last Error gibt einen unsigned long integer Wert zurück... Der ist weder unicode noch ascii? Ich würde halt mal versuchen via stringstream den integer-wert in einen string umzuwandeln und dann per OutputDebugString() oder whatever auszugeben...
xNopex is offline  
Old 05/02/2011, 16:53   #7
 
elite*gold: 0
Join Date: Mar 2009
Posts: 20
Received Thanks: 0
okay ich gebs auf, ich muss mir wohl zu gestehen, dass der umstieg von php direkt zu c++ und winapi zu schwer(für mich) ist
... könnt ihr was anderes umpfehlen, oder kommt man um die winapi nicht rum?
MfG Lukas

edit: habe da was von qt gelesen aber das ist von nokia?
luckylukas92 is offline  
Old 05/02/2011, 17:09   #8
 
.BritainAndy's Avatar
 
elite*gold: 0
Join Date: Jan 2010
Posts: 1,385
Received Thanks: 1,006
http://de.wikipedia.org/wiki/Qt_(Bibliothek) ?
.BritainAndy is offline  
Old 05/02/2011, 17:14   #9
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Quote:
könnt ihr was anderes umpfehlen, oder kommt man um die winapi nicht rum?
xNopex is offline  
Reply




All times are GMT +1. The time now is 18:33.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.