Thread Socket Connect mit Perl: Socket Connect mit Perl
(26 answers)
Opened by betterworld at 2004-07-19 17:34
hallo nochmal.
also zur zeit habe ich etwas ähnliches in C gemacht. (hab aber egientlich keine ahnung von C :-( . deshalb würde ich sowas gern in perl basteln. nochmal kurz zum problem: - ich habe von einer externen Firma eine asynchrone Socket-API zur Verfügung gestellt bekommen (IP+Port) (incl. der möglichen Reuqests..) - nun will ich ein kleines Tool bauen, welches sich auf den Socket verbindet und Requests absendet und den Response dieses "Socket-APi-Servers" ausgibt bis ich irgendwann das Programm mit einem bestimmten String beende. (QUIT oder so..) ich kann ja mal meinen C-Code posten :-) ######################################## #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define SERVER_PORT 40411 /* Fehlerausgang */ void error_exit(char *name, char *call) { char buf[256]; sprintf(buf, "\7\7\nCLIENT ERROR! %s in %s: ", name, call); perror(buf); exit(1); } /* error_exit() */ void main(int argc, char **argv) { int sock_fd; struct sockaddr_in server_addr; char buffer[256]; int nbytes, rval; /* 1. Parameter = IP-Adresse des Servers */ if (argc != 2) { fprintf(stderr, "Aufruf: %s Server-IP-Adresse\n", argv[0]); exit(1); } /* Socket oeffnen */ sock_fd = socket(AF_INET, SOCK_STREAM, 0); fprintf(stderr, "CLIENT SOCKET %d\n", sock_fd); if (sock_fd < 0) error_exit(argv[0], "socket"); /* Socket mit Server verbinden */ bzero((char *) &server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr(argv[1]); server_addr.sin_port = htons(SERVER_PORT); rval = connect(sock_fd, (struct sockaddr *) &server_addr, sizeof(server_addr)); fprintf(stderr, "CLIENT CONNECT %d\n", rval); if (rval < 0) error_exit(argv[0], "connect"); /* Eine Zeile lesen, versenden, Echo lesen und ausgeben */ fprintf(stderr, "Eingabe: "); if (fgets(buffer, sizeof(buffer) - 1, stdin)) { nbytes = strlen(buffer); if (nbytes > 0 && buffer[nbytes-1] == '\n') buffer[nbytes-1] = '\0'; nbytes = write(sock_fd, buffer, sizeof(buffer)); if (nbytes < 0) error_exit(argv[0], "write"); fprintf(stderr, "CLIENT WRITE %d Bytes [%s]\n", nbytes, buffer); nbytes = read(sock_fd, buffer, sizeof(buffer)); if (nbytes < 0) error_exit(argv[0], "read"); fprintf(stderr, "CLIENT READ %d Bytes [%s]\n", nbytes, buffer); /* Eine Zeile lesen, versenden, Echo lesen und ausgeben */ fprintf(stderr, "Eingabe: "); if (fgets(buffer, sizeof(buffer) - 1, stdin)) { nbytes = strlen(buffer); if (nbytes > 0 && buffer[nbytes-1] == '\n') buffer[nbytes-1] = '\0'; nbytes = write(sock_fd, buffer, sizeof(buffer)); if (nbytes < 0) error_exit(argv[0], "write"); fprintf(stderr, "CLIENT WRITE %d Bytes [%s]\n", nbytes, buffer); nbytes = read(sock_fd, buffer, sizeof(buffer)); if (nbytes < 0) error_exit(argv[0], "read"); fprintf(stderr, "CLIENT READ %d Bytes [%s]\n", nbytes, buffer); } close(sock_fd); exit(0); } /* main() */ |