Hej allesammen!
Så er jeg tilbage med mine C++ problemer...
Jeg prøver at lave en (meget) simpelt IRC klient der nu både kan modtage og sende data. Derfor gør jeg brug af Mutex of tråde.
Problemet er at jeg modtager en Exception hver gang jeg kører min kode der siger "Der blev fors°gt
(forsøgt) en handling pÕ
(på) noget, som ikke er en socket."
I følgende kode:
#include "Net.h"
#include "UnknownHostException.h"
#include "NetException.h"
#include "ConnectionLostException.h"
#include "TCPSocket.h"
#include "Thread.h"
#include "Mutex.h"
#include <iostream>
#if defined(__linux__)
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#endif
Mutex gMutex;
class IRCReader : public Thread {
public:
IRCReader(TCPSocket socket) : aSocket(socket){};
static bool bKeepRunning;
protected:
virtual void run() {
while(bKeepRunning)
{
try {
char buffer[1024];
int bytesRead;
while(bKeepRunning) {
gMutex.enter();
bytesRead = aSocket.read(buffer, sizeof(buffer));
std::cout.write(buffer, bytesRead);
std::cout.flush();
gMutex.leave();
}
} catch(ConnectionLostException & e) {
// Server disconnect
}
aSocket.close();
}
}
private:
TCPSocket aSocket;
};
bool IRCReader::bKeepRunning = true;
int main(int argc, char ** argv)
{
try {
netInit();
try {
string adrstr = "irc.freenode.net";
TCPSocket socket(adrstr, 6667);
socket.connect();
std::string say = "PASS NOPASS\r\nNICK SaebekassebilII__\r\nUSER SaebekassebilIII_ 8 * :John Doe\r\nJOIN #saebekassebil\r\n";
socket.write(say.c_str(), say.size());
IRCReader reader(socket);
reader.start();
std::string inputString;
while(inputString != "quit")
{
std::cin >> inputString;
gMutex.enter();
socket.write(inputString.c_str(), inputString.size());
gMutex.leave();
}
IRCReader::bKeepRunning = false;
reader.waitForThread();
} catch(NetException & e) {
std::cout << e << std::endl;
}
netRelease();
} catch(NetException & e) {
std::cout << "Couldn't initialize the component: " << e << std::endl;
}
return 0;
}
Kan slet ikke fatte fejlen da jeg mener at jeg har taget højde for det hele?
Indlæg senest redigeret d. 06.02.2010 20:42 af Bruger #11328