Nie mogę ponownie uruchomić programu

witam, mam dwa programy : klient i serwer, są one przeznaczone do działania na linuxie, i

najpierw uruchamiam serwer

./serwer1

a następnie klient z parametrami:

./klient1 127.0.0.1 5555

i teraz jest to serwer współbieżny, czyli może obsługiwać kilku klientów jednocześnie, i jest taki problem z serwerem

klient normalnie się uruchamia i wykonuje co ma wykonać i normalnie się kończy, także proces potomny serwera uruchomiony dla tego klienta także się kończy poprawnie (chyba, nie ma go na liście procesów), ale proces macierzysty serwera muszę kończyć killem, bo nie wiem jak go zakończyć ręcznie,

  • jak zrobić w serwerze kończenie programu głównego po naciśnięciu np. esc??

  • jak zakończę program serwera killem to ponowne uruchomienie go nie jest możliwe (czasem się udaje) i wyświetla mi zdefiniowany błąd związany z funkcją bind

bardzo proszę o pomoc i wskazówki co mam poprawić bo już nie mam do tego siły.

serwer:

http://wklej.to/tuzl

klient:

http://wklej.to/9SYJ

:slight_smile:

pewnie będzie to jakiś głupi błąd, ale zawsze świeże spojrzenie to szybko wychwyci.

Co do kończenia to np zastąp

// Oczekiwanie na żądanie klienta

while(1){

czymś takim

// Oczekiwanie na żądanie klienta

int koniec = 0;

while(!koniec){

I na przykład jeśli serwer otrzyma słowo ‘exit’ od klienta to ustawisz sobie koniec=1 i wyjdziesz z pętli. Pozostałe opcje to np. obsługa wciśnięcia ctrl+c lub oczekiwanie za pomocą funkcji pool/select na jakieś wydarzenie ( zarówno sockety jak i stdin).

Po nieprawidłowym zamknięciu programu (bez użycia close na sockecie) port jest jeszcze zajęty przez jakiś czas i żadne inny program nie może zrobić bind do tego samego numeru.

właśnie tak myślałem, że właśnie nieprawidłowe zamknięcie programu blokuje gniazdo, ale to już rozwiązałem poprzez funkcję setsockopt() zaczerpniętą z tej strony

http://regedit.gamedev.pl/Mirror/Beej_s … erver.html

co do zamykania serwera jeśli zrobię ręczne zamykanie to problem z gniazdem sam się powinien rozwiązać.

po południu sprawdzę twoje wskazówki.

:slight_smile:

Dodane 16.12.2009 (Śr) 20:28

dobrze z serwerem już sobie poradziłem, ale teraz mam problem z klientem

klient

http://wklej.to/9SYJ

jeśli go uruchomię tak:

./klient1 127.0.0.1 5555

to działa dobrze, jeśli nie podam wszystkich parametrów lub podam np. zamiast parametrów np.

./klient1 cos cos to mi ładnie zwraca błąd i wychodzi ale jak uruchomię go z adresem innym niż 127.0.0.1 np: 85.254.598.0 (całkowicie losowy) to jak zrobić aby np. po 10 sekundach zwracał błąd, że nie może się połączyć

bo na razie jak go tak uruchomię to klient się zawiesza i nie może ani się połączyć ani zakończyć.

:slight_smile: