Jestem całkiem nowy w kodowaniu Uniksa i chciałbym popracować nad kilkoma prostymi projektami sieciowymi. Znalazłem kilka samouczków, których dokładnie szukam - w szczególności ten: http://www.linuxhowtos.org/C_C++/socket.htm .
Zrozumiałem, jak skompilować pliki serwera i klienta c w pliki wykonywalne i mogę je uruchomić w terminalu w następujący sposób:
open server
open client
ponieważ używam Mac OS X 10.7.5. Mój problem polega na tym, że muszę przekazywać argumenty do tych programów podczas ich inicjowania. Samouczek używa tego kodu:
server 51717
client clientName 51717
ale nie znalazłem sposobu na skopiowanie tego w moim terminalu Mac.
open server --args 51717 //doesn't work
Znalazłem ten post i utworzyłem skrypt jabłkowy z tym kodem
do shell script "open -a /Desktop/server --args 51717"
ale to powoduje wiele błędów. Próbowałem wielu odmian, ale nie udało mi się uruchomić żadnej. Nie mogłem też uruchomić przykładu Chrome z tego postu (nie mam zainstalowanego FF).
Jak przekazać prosty numer portu jako argument do programu, tak jak w samouczku? Czy to łatwiej zrobić na komputerze z systemem Linux? W tej chwili nie mam problemu ze zmianą systemu operacyjnego i byłoby idealnie, gdybym mógł użyć składni „serwer 51717”, której używa samouczek, zamiast tworzyć osobny skrypt uruchamiania dla każdego programu. Szukasz odpowiedzi i porady. Dzięki.
EDYTOWAĆ:
Sprawiłem, że działa poprawnie, ale coś wciąż nie działa poprawnie. Uruchamiam serwer w następujący sposób:
$ ./server 3456
następnie otwórz nowy terminal i uruchom klienta z ograniczonym sukcesem:
$ ./client mClient 3456
ERROR, no such host
$ ./client 127.0.0.1 3456
Please enter the message: //running correctly
//... this also works
$ ./client 127.1 3456
Please enter the message: //running correctly
Mogę uruchomić klienta z pewnymi kombinacjami liczb. Numerów, ale to nie działa dla wszystkich i nie mogę używać żadnych liter. Dlaczego działa tylko jedno z tych rozwiązań?
ROZWIĄZANIE:
$ sudo nano /private/etc/hosts
dodaj 127.0.0.1 mClient
na dole, a następnie naciśnij Ctrl ^ o, aby zapisać
Teraz to działa:
$ ./client mClient 3456
Odpowiedzi:
Skompiluj kod:
Uruchom serwer bez argumentów:
Uruchom serwer z jednym argumentem:
W innym terminalu:
komunikat użytkowania wskazuje, jak uruchomić plik binarny, czyli jakie argumenty podać
ponieważ serwer nasłuchuje na wszystkich interfejsach, możesz również użyć
więc argumenty są łańcuchami po poleceniu. W przykładzie gcc są 3 argumenty:
server.c -o server
odpowiednią częścią kodu jest (serwer):
argv jest wektorem (tablicą), który przechowuje wszystkie argumenty podane w poleceniu w wierszu polecenia. atoi konwertuje ciąg na liczbę całkowitą.
źródło
localhost
będzie również działać, ponieważ jest ono aliasowane do 127.0.0.1, twój lokalny adres IP również (192.168.0.13 lub inny).Po prostu uruchom plik binarny bezpośrednio z konsoli - używając open na moim MacBooku (10.8.4) „arbitralnych” plików binarnych nie można otworzyć z open (open ma na celu użycie deskryptora pliku do otwarcia pliku w odpowiedniej aplikacji).
Na przykład, jeśli pliki binarne serwera i klienta znajdują się na pulpicie (~ / Desktop), można je uruchomić z konsoli za pomocą:
Lub lokalnie w katalogu Desktop:
Jest to dokładnie to samo zachowanie, jakie można zobaczyć w systemie Linux (lub innym systemie * ix).
Pamiętaj, że pliki powinny być oznaczone jako pliki wykonywalne, ale kompilator zwykle zrobi to za Ciebie.
Powodzenia!
źródło