Ich bin ziemlich neu in der Unix-Codierung und würde gerne an ein paar einfachen Netzwerkprojekten arbeiten. Ich habe ein paar Tutorials gefunden, die genau das sind, wonach ich suche - insbesondere dieses: http://www.linuxhowtos.org/C_C++/socket.htm .
Ich habe herausgefunden, wie man die Server- und Client-C-Dateien in ausführbare Dateien kompiliert, und ich kann sie im Terminal wie folgt ausführen:
open server
open client
seit ich Mac OS X 10.7.5 benutze Mein Problem ist, dass ich Argumente an diese Programme übergeben muss, wenn ich sie initialisiere. Das Tutorial verwendet diesen Code:
server 51717
client clientName 51717
Aber ich habe keine Möglichkeit gefunden, dies in meinem Mac-Terminal zu replizieren.
open server --args 51717 //doesn't work
ich habe das gefunden Post und erstellte ein AppleScript mit diesem Code
do shell script "open -a /Desktop/server --args 51717"
aber das wirft eine Reihe von Fehlern auf. Ich habe viele Variationen ausprobiert, konnte aber keine zum Laufen bringen. Ich konnte das Chrome-Beispiel von diesem Beitrag auch nicht zum Laufen bringen (ich habe FF nicht installiert).
Wie übergebe ich dem Programm eine einfache Integer-Port-Nummer als Argument, wie im Tutorial beschrieben? Ist das auf einem Linux-Rechner einfacher? Ich habe kein Problem damit, die Betriebssysteme zu wechseln, und es wäre ideal, wenn ich die Syntax 'server 51717' verwenden könnte, die im Lernprogramm verwendet wird, anstatt für jedes Programm ein separates Ausführungsskript erstellen zu müssen. Auf der Suche nach einer Antwort und einem Rat. Vielen Dank.
BEARBEITEN:
Ich habe es richtig laufen lassen, aber etwas funktioniert immer noch nicht richtig. Ich starte den Server so:
$ ./server 3456
Öffnen Sie dann ein neues Terminal und starten Sie den Client mit begrenztem Erfolg:
$ ./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
Ich kann den Client mit einigen Zahlenkombinationen starten, aber es funktioniert nicht für alle und ich kann keine Buchstaben verwenden. Warum funktioniert nur eine dieser Lösungen?
LÖSUNG:
$ sudo nano /private/etc/hosts
hinzufügen 127.0.0.1 mClient
nach unten und drücken Sie dann Strg ^ o, um zu speichern
Das funktioniert jetzt:
$ ./client mClient 3456
Antworten:
Kompilieren Sie den Code:
Führen Sie den Server ohne Argumente aus:
Führen Sie den Server mit einem Argument aus:
In einem anderen Terminal:
Eine Verwendungsmeldung gibt an, wie eine Binärdatei ausgeführt werden soll. Dies sind die Argumente, die angegeben werden müssen
Da der Server alle Schnittstellen abhört, können Sie auch verwenden
Argumente sind also Zeichenfolgen, die dem Befehl folgen. Im gcc-Beispiel gibt es 3 Argumente:
server.c -o server
Der relevante Teil des Codes ist (Server):
argv ist der Vektor (Array), der alle Argumente enthält, die an der Eingabeaufforderung für einen Befehl angegeben wurden. atoi konvertiert einen String in eine Ganzzahl.
quelle
localhost
funktioniert auch, weil es auf 127.0.0.1 eingestellt ist, auch Ihre lokale IP-Adresse (192.168.0.13 oder so).Führen Sie die Binärdatei einfach direkt von der Konsole aus - mit open auf meinem MacBook (10.8.4) können "beliebige" Binärdateien nicht von open aus geöffnet werden (open soll einen Dateideskriptor zum Öffnen einer Datei in der entsprechenden Anwendung verwenden).
Wenn sich Ihre Server- und Client-Binärdateien beispielsweise in Desktop (~ / Desktop) befinden, können sie von der Konsole aus ausgeführt werden:
Oder lokal im Desktop-Verzeichnis:
Dies ist genau das gleiche Verhalten wie unter Linux (oder einem anderen * ix-System).
Beachten Sie, dass die Dateien als ausführbar markiert werden müssen, der Compiler dies jedoch normalerweise für Sie erledigt.
Viel Glück!
quelle