Thread Socket Connect mit Perl: Socket Connect mit Perl (26 answers)
Opened by betterworld at 2004-07-19 17:34

blackheim
 2004-07-20 09:42
#37384 #37384
User since
2004-07-19
7 Artikel
BenutzerIn
[default_avatar]
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() */

View full thread Socket Connect mit Perl: Socket Connect mit Perl