Wenn ich den TCPServer innerhalb von main initialisiere funktioniert es, wenn ich versuche es mit der startServer() Funktion zu starten funktioniert es nicht, ich meine ich kann keine Verbindung herstellen Kitt.Poco TCPServer startet nicht außerhalb von
Was mache ich hier falsch?
Danke für jede Hilfe.
class EchoConnection : public TCPServerConnection {
public:
EchoConnection(const StreamSocket& s)
: TCPServerConnection(s) {}
void reply(char buffer[])
{
bzero(buffer, 256);
std::string myWord = "myWord\n\r";
strcpy(buffer, myWord.c_str());
}
void run() {
StreamSocket& ss = socket();
try {
char buffer[256];
int n = ss.receiveBytes(buffer, sizeof(buffer));
while (n > 0) {
reply(buffer);
ss.sendBytes(buffer, sizeof(buffer));
n = ss.receiveBytes(buffer, sizeof(buffer));
}
}
catch (Poco::Exception& exc)
{ std::cerr << "EchoConnection: " << exc.displayText() << std::endl; }
}
};
void startServer()
{
Poco::Net::TCPServer srv(new Poco::Net::TCPServerConnectionFactoryImpl<EchoConnection>, 8089);
srv.start();
SocketAddress sa("localhost", srv.socket().address().port());
StreamSocket ss(sa);
std::string data("hello, world");
ss.sendBytes(data.data(), (int)data.size());
char buffer[256] = { 0 };
int n = ss.receiveBytes(buffer, sizeof(buffer));
std::cout << std::string(buffer, n) << std::endl;
}
int main(int argc, char** argv) {
Poco::Net::TCPServer srv(new Poco::Net::TCPServerConnectionFactoryImpl<EchoConnection>, 8089);
srv.start();
SocketAddress sa("localhost", srv.socket().address().port());
StreamSocket ss(sa);
std::string data("hello, world");
ss.sendBytes(data.data(), (int)data.size());
char buffer[256] = { 0 };
int n = ss.receiveBytes(buffer, sizeof(buffer));
std::cout << std::string(buffer, n) << std::endl;
// startServer(8089);
ModuleData modData;
modData.ModuleNumber = 1;
modData.ModuleTypeId = 1;
string test = modData.serialize();
ifstream dataFile;
dataFile.open("ModuleData.dat");
if (dataFile.is_open())
{
string line;
while (getline(dataFile, line))
{
cout << line << std::endl;
}
dataFile.close();
}
while (1)
{
}
srv.stop();
}
Warum müssen Sie es außerhalb von 'main()' eigentlich initialisieren? – user0042
Es besteht keine Notwendigkeit, es außerhalb von main zu initialisieren. Aber ich möchte es in eine eigene cpp-Datei verschieben. Ich würde gerne verstehen, wo der Unterschied bei der Initialisierung außerhalb von main liegt. – Helmut
Es gibt keine Garantien über die Reihenfolge, in der die Initialisierungssequenzen außerhalb von 'main()' ausgeführt werden, und die Reihenfolge, in der sie ausgeführt werden. Das könnte ein Grund für das Verhalten sein, das Sie beobachten. – user0042