Unix Socket - Client-Beispiele
Um einen Prozess zu einem TCP-Client zu machen, müssen Sie die folgenden Schritte ausführen: & minus;
Erstellen Sie einen Socket mit dem Systemaufruf socket () .
Verbinden Sie den Socket mit dem Systemaufruf connect () mit der Adresse des Servers .
Daten senden und empfangen. Es gibt verschiedene Möglichkeiten, dies zu tun. Am einfachsten ist es jedoch, die Systemaufrufe read () und write () zu verwenden.
Lassen Sie uns diese Schritte nun in Form von Quellcode ausführen. Fügen Sie diesen Code in die Datei einclient.c und kompiliere es mit gcc Compiler.
Führen Sie dieses Programm aus und übergeben Sie den Hostnamen und die Portnummer des Servers, um eine Verbindung zum Server herzustellen, den Sie bereits in einem anderen Unix-Fenster ausgeführt haben müssen.
#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <netinet/in.h>
#include <string.h>
int main(int argc, char *argv[]) {
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
char buffer[256];
if (argc < 3) {
fprintf(stderr,"usage %s hostname port\n", argv[0]);
exit(0);
}
portno = atoi(argv[2]);
/* Create a socket point */
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("ERROR opening socket");
exit(1);
}
server = gethostbyname(argv[1]);
if (server == NULL) {
fprintf(stderr,"ERROR, no such host\n");
exit(0);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length);
serv_addr.sin_port = htons(portno);
/* Now connect to the server */
if (connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
perror("ERROR connecting");
exit(1);
}
/* Now ask for a message from the user, this message
* will be read by server
*/
printf("Please enter the message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
/* Send message to the server */
n = write(sockfd, buffer, strlen(buffer));
if (n < 0) {
perror("ERROR writing to socket");
exit(1);
}
/* Now read server response */
bzero(buffer,256);
n = read(sockfd, buffer, 255);
if (n < 0) {
perror("ERROR reading from socket");
exit(1);
}
printf("%s\n",buffer);
return 0;
}