#22 hlucheucho
U aplikace A vytvořím nové vlákno a v tomto vlákně se ve smyčce pokouším pořád dokola otevřít soubor, který vytvořila aplikace B. Ve smyčce mám sleep 500 ms aby toto vlákno tak moc nevytěžovalo hlavní vlákno aplikace A. A toto mi nefunguje. Aplikace B soubor vytvořila, ale aplikace A ho v tom svým vlákně nevidí.
Až když aplikaci A zastavím a znovu spustím, tak teprve potom soubor uvidí.
Jinak tady zdroják co sem použil když jsem zkoušel sockety
Aplikace A:
int main()
{
pthread_t threadId = 0;
if (pthread_create(&threadId, 0, Thread_Fce_Exit, 0) != 0)
return 0;
return EV3_main();
}
void* Thread_Fce_Exit(void* lpVoid)
{
WriteLog("Thread_Fce_Exit - Start");
int mainSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (mainSocket < 0)
{
WriteLog("Error - create socket");
return 0;
}
WriteLog("1(%d)", mainSocket);
sockaddr_in sockName;
sockName.sin_family = AF_INET;
sockName.sin_port = htons(1616);
sockName.sin_addr.s_addr = INADDR_ANY;
if (bind(mainSocket, (sockaddr*)&sockName, sizeof(sockName)) < 0)
{
WriteLog("Error - bind socket");
return 0;
}
WriteLog("2");
if (listen(mainSocket, 10) < 0)
{
WriteLog("Error - listen socket");
return 0;
}
WriteLog("3");
while (1)
{
sockaddr_in clientInfo;
socklen_t addrlen = 0;
WriteLog("4");
int clientSocket = accept(mainSocket, (sockaddr*)&clientInfo, &addrlen);
if (clientSocket < 0)
{
WriteLog("Error - accept(%d)", errno);
return 0;
}
break;
}
std::exit(0);
return 0;
}
Aplikace B, která se spouští později než A.
int main()
{
WriteLog("cpp4robots_kill - Start");
hostent* host = gethostbyname("127.0.0.1");
if (host == 0)
{
WriteLog("Error - gethostbyname");
return 0;
}
WriteLog("1");
int mainSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (mainSocket < 0)
{
WriteLog("Error - create socket");
return 0;
}
WriteLog("2");
sockaddr_in serverSock;
serverSock.sin_family = AF_INET;
serverSock.sin_port = htons(1616);
memcpy(&(serverSock.sin_addr), host->h_addr, host->h_length);
if (connect(mainSocket, (sockaddr*)&serverSock, sizeof(serverSock)) < 0)
{
WriteLog("Error - connect(%d)", errno);
return 0;
}
WriteLog("cpp4robots_kill - End");
return 0;
}
Tady mi aplikace B vždy selže na funkci connect.
errno je po volání connect nastaveno na 111 (ECONNREFUSED - Connection refused)
Pokud by jsi věděl, jak ty sockety udělat lokálně, asi by to bylo nejlepší řešení pro mě.
Díky.