IRC_Clientprob



  • Hallo Leute,

    also ich hab im internet einen simplen irc client gefunden(wollte in benutzen um nicht immer in die rfc zu gucken wenn ich wissen wollte was ein Befehl vom server zurück gibt). Hab ihn kompiliert und gelinkt funkt auch soweit blos wenn ich das Programm starte und alle daten eingegeben habe die es verlangt kommt ein error von Windows und das Programm wird beendet.

    Hier mal der Quellcode:

    #include <windows.h>
    #include <iostream>
    #include <string.h>
    #include <winsock.h>
    #include <process.h>
    
    #pragma comment(lib, "ws2_32.lib")
    
    void Zugangsdaten(std::string *zugangsdaten)
    {
    	char temp[30];
    
    	std::cout<< "Nick: ";
    	std::cin.getline(temp, 30, '\n');
    	zugangsdaten[0] = temp;
    	std::cout<< "Name: ";
    	std::cin.getline(temp, 30, '\n');
    	zugangsdaten[1] = temp;
    	std::cout<< "Server: ";
    	std::cin.getline(temp, 30, '\n');
    	zugangsdaten[2] = temp;
    	std::cout<< "Raum: ";
    	std::cin.getline(temp, 30, '\n');
    	zugangsdaten[3] = temp;
    }
    
    unsigned int VerbindenAnServer(std::string server, int port)
    {
    	SOCKET sock;
    	char serverip[20];
    	sockaddr_in addr;
    	WSADATA wsaData;
    
    	if(WSAStartup(MAKEWORD(2,0), &wsaData) != 0)
    		std::cout<<"WSA konnte nicht initialisiert werden.";
    
    	hostent *dns = gethostbyname(server.c_str());
    
    	sprintf(serverip, "%u.%u.%u.%u",
    		(unsigned char) dns->h_addr_list[0][0],	(unsigned char) dns->h_addr_list[0][1],
    		(unsigned char) dns->h_addr_list[0][2], (unsigned char) dns->h_addr_list[0][3]);
    
    	addr.sin_family = AF_INET;
    	addr.sin_port = htons(port);
    	addr.sin_addr.s_addr = inet_addr(serverip);
    
    	sock = socket(AF_INET, SOCK_STREAM, 0);
    	if(sock == 0)
    		std::cout<<"Socket konnte nicht initialisiert werden";
    
    	if(connect(sock, (sockaddr *) &addr, sizeof(addr)) == -1)
    		std::cout<<"Verbindung konnte nicht hergestellt werden";
    
    	char temp[10000];
    	int x = recv(sock, temp, 10000, 0);
    	temp[x] = 0;
    	std::cout<< temp;
    
    	return sock;
    }
    
    void AnmeldenAnServer(SOCKET sock, std::string *zugangsdaten)
    {
    	std::string nick = "NICK ";
    	std::string user = "USER ";
    
    	nick += zugangsdaten[0];
    	nick += "\r\n";
    
    	user += zugangsdaten[0];
    	user += ' ';
    	user += "localhost ";
    	user += zugangsdaten[2];
    	user += ' ';
    	user += zugangsdaten[1];
    	user += "\r\n";
    
    	send(sock, nick.c_str(), nick.length(), 0);
    	send(sock, user.c_str(), user.length(), 0);
    
    	char temp[10000];
    	int x = recv(sock, temp, 10000, 0);
    	temp[x] = 0;
    	std::cout<< temp;
    }
    
    void InRaumGehen(SOCKET sock, std::string *zugangsdaten)
    {
    	std::string join = "JOIN ";
    
    	join += zugangsdaten[3];
    	join += "\r\n";
    
    	send(sock, join.c_str(), join.length(), 0);
    
    	char temp[10000];
    	int x = recv(sock, temp, 10000, 0);
    	temp[x] = 0;
    	std::cout<< temp;
    }
    
    void NachrichtenEmpfangen(void *sock)
    {
    	char ausgabe[1000];
    	int x = 0;
    
    	while(1)
    	{
    		x = recv((SOCKET)sock, ausgabe, 1000, 0);
    
    		if(x > 0)
    		{
    			ausgabe[x] = 0;
    			std::cout<< ausgabe << std::endl;
    		}
    		Sleep(10);
    	}
    }
    
    void NachrichtenSenden(SOCKET sock)
    {
    	char temp[1000];
    	std::string eingabe;
    
    	while(1)
    	{
    		std::cin.getline(temp, 100, '\n');
    		eingabe = temp;
    		eingabe += "\r\n";
    
    		send(sock, eingabe.c_str(), eingabe.length(), 0);
    	}
    }
    
    int main()
    {
    	SOCKET sock;
    	std::string zugangsdaten[4];
    
    	Zugangsdaten(zugangsdaten);
    	sock = VerbindenAnServer(zugangsdaten[2], 6669);
    	AnmeldenAnServer(sock, zugangsdaten);
    	InRaumGehen(sock, zugangsdaten);
    	CreateThread(NULL, 0, (unsigned long (__stdcall *)(void *))NachrichtenEmpfangen, (void *)sock, 0, NULL);
    	NachrichtenSenden(sock);
    
    	std::cin.get();
    	WSACleanup();
    	return 0;
    }
    


  • IRC_Client schrieb:

    [...]Hab ihn kompiliert und gelinkt funkt auch soweit blos wenn ich das Programm starte und alle daten eingegeben habe die es verlangt kommt ein error von Windows und das Programm wird beendet.[...]

    Die 'Frage' is jetzt n Scherz oder ?! 😮 ... ➡ Smart Questions.

    @Swordfish: So machst du das doch auch immer 😃 .



  • ok die kurze frage:
    Warum bricht er ab wenn er connected?


Anmelden zum Antworten