Ich versuche, die Socket-Programmierung in C zu implementieren. Wenn ich versuche, eine Verbindung von einem Client zu einem Server (Ubuntu) herzustellen, wird ein Fehler wie "Verbindung fehlgeschlagen" angezeigt.
Ich denke, das Problem liegt beim Port. Ich verwende den 5454 / TCP-Port für die Socket-Programmierung.
Wie kann ich feststellen, ob der 5454-Port empfangsbereit ist oder nicht? Wenn nicht, welche Ports kann ich dann für die TCP-Socket-Programmierung mit C in Ubuntu verwenden? Ist das das Problem nur mit dem Port oder ist etwas in meinem Code falsch oder sind Einstellungen in LINUX Ubuntu erforderlich?
EDIT: Codeausschnitt:
int socket_send;
struct sockaddr_in address;
printf("\n Initialization Socket....");
socket_send = socket(AF_INET,SOCK_STREAM,0);
if(socket_send == -1)
{
perror("\n Socket not created.Error:");
return 1;
}
printf("\n Socket created");
address.sin_family=AF_INET;
address.sin_addr.s_addr=inet_addr(ip);
address.sin_port=htons(5454);
if(connect(socket_send,(struct sockaddr*)&address,sizeof(struct sockaddr))<0)
{
perror("\nConnetion failed.Error:");
return 1;
}
printf("\n Connected");
if(send(socket_send,(char*)buffer,size,flag)<0)
{
perror("\nSending failed.Error:");
return 1;
}
printf("\n Data successfully sent");
close(socket_send);
EDIT : Das Problem liegt im Port, also habe ich Ubuntu gerade neu installiert und es funktioniert. Danke euch allen.
lsof -i:5454
(möglicherweise müssen Sie es als denselben Benutzer ausführen, den das Programm, das den Port öffnet, oder als Root ausführt).Antworten:
Da Sie in CI programmieren und daran gedacht haben, ein kleines Snippet zu veröffentlichen, das Ihnen zeigt, ob der Port offen ist oder nicht, habe ich die Ausgabe eines Strings programmiert. Sie können es leicht an Ihre Bedürfnisse anpassen.
Antwort auf Ihre zweite Frage, wie alle hier sagten, können Sie so ziemlich jeden Port verwenden, wenn Sie der Superuser (Root) auf dem System sind, wenn der Port von keiner anderen Anwendung verwendet wird. Wenn Sie nicht der Root sind, können Sie einen beliebigen Port über 1024 öffnen.
quelle
SOCK_CLOEXEC
für densocket()
Aufruf angegeben wird.Es gibt verschiedene Möglichkeiten, die wahrscheinlich häufigste:
Sie können natürlich auch
grep
andere (reguläre) Ausdrücke verwenden.Wenn Sie verschiedene Computer (Client und Server) verwenden, müssen Sie dies ebenfalls überprüfen
iptables
.Sie können so ziemlich jeden Port verwenden, der derzeit nicht für Ihre Programme verwendet wird. Suchen Sie jedoch
/etc/services
nach bekannten und reservierten Ports.quelle
Überprüfen Sie, ob der Link ( http://wi-fizzle.com/article/458 ) für den TCP-Port geöffnet ist oder nicht
quelle
Verwenden Sie den Befehl:
nmap 192.168.56.101
Daraus ergibt sich die Anzahl der auf diesem Computer geöffneten Ports sowie der Name der Dienste
quelle
nmap
dafür zu benutzen, ist meiner Meinung nach um den heißen Brei. Um einen einzelnen Port zu überprüfen, sollten Sie verwendennmap -p5454 192.168.56.101
.Das beste Tool, um festzustellen, ob ein Prozess an einen TCP-Port gebunden ist, ist
netstat
. Sie können es so ausführen, um eine Liste des Namens des Prozesses, der gegebenenfalls gebunden ist, sowie aller Verbindungen zum Port und seines Status zu erhalten.Beispiel
Das Obige zeigt lokal geöffnete Ports in der 3. Spalte und Remote-Ports, zu denen wir Verbindungen akzeptieren möchten, z. B. mit diesen beiden Leitungen:
Diese beiden Zeilen zeigen, dass wir Port 22 (sshd) abhören und bereit sind, Verbindungen von jeder Schnittstelle zu akzeptieren (dh von jeder Netzwerkkarte, jedem Ethernet oder drahtlosen Netzwerk). Derzeit bestehen keine Verbindungen zu diesem Port.
Die zweite Zeile zeigt, dass der CUPS-Server (zum Drucken) auf Port 631 ausgeführt wird und wir nur über die localhost-Schnittstelle (127.0.0.1) eine Verbindung zu ihm herstellen können.
Weiter unten haben wir diese 2 Zeilen:
Welche zeigen, dass wir auf eine Website unter der IP-Adresse 198.252.206.25 zugreifen. Wir wissen, dass es sich um eine Website handelt, da wir über Port 80 (HTTP) auf diesen Server zugreifen. Auch wenn wir die IP-Adresse nachschlagen, finden wir Folgendes:
quelle