Hej! segmentation faults får du om du använder felaktigt minne (inte allokerat osv.)Server och klient program i ACE
Jag skall göra en server och klient program mha ACE bibliotek. Min klient skall vara server för en annan klient.
Jag har gjort ett program men när jag kör den så säger den hela tiden att segmentation Fault.
Jag kan klistra in min main program för att ni kan se om jag är på rätt väg.
Hur kan man se vilken portnummer som är inte upptagen i en maskin?
Jag skall köra båda min klient och server processer på en och samma maskin. Så när jag kör mitt program så ger jag LOCAHOST som server och port nummer 5001 eller en högre nummer för port.
int main(int argc, char* argv[])
{
if (3 != argc)//Här måste jag hämta server porten
{
ACE_DEBUG
((LM_DEBUG, ACE_TEXT("(%t) ExternalsystemServer:: Usage: %s <server> <port>\n"),
argv[0]
));
return 0;
}
ACE_INET_Addr addr(5001);//Här portnumret skall läsas från ConfigData filen.
//Register the EIS client with the ACE Reactor
//client klassen ärver från ACE_SVC_Handler
typedef ACE_Acceptor<ClientModule::Client,ACE_SOCK_ACCEPTOR> ClientAcceptor;
ClientAcceptor ClientAcceptor(addr, ACE_Reactor::instance());
//Här behöver jag open funktionen kanske. Jag får väl se
ofstream outDataFile2("recived_data_client.txt");
//ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_NULL_SYNCH> test_handler;
Eis::SystemModule::EisRecievData* eisRecievData;
eisSendData.setPeer(eisRecievData->peer());
int iRet = eisSendData.activate();
if (-1 == iRet)
{
ACE_DEBUG((LM_DEBUG,
ACE_TEXT("(%t) Eis:: Failed to start EisSendData\n")));
}
ACE_Reactor::instance()->run_reactor_event_loop();
return 0;Sv: Server och klient program i ACE
Ett hett tips är raderna:
Eis::SystemModule::EisRecievData* eisRecievData;
eisSendData.setPeer(eisRecievData->peer());
där eisRecievData inte är initierad.
Portnummer måste du så vitt jag kan komma ihåg testa dig fram för att få reda på.