Socket Connect mit C
-
hallo zusammen..
- ich habe von einer externen Firma eine asynchrone Socket-API zur Verfügung gestellt bekommen (IP+Port) (incl. der möglichen Requests..)
- 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..)
- zur Zeit kann ich mit meinem programm aber nur 1 request senden
- wie kann ich sowas am besten anstellen ?danke schonmal
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);}
close(sock_fd);exit(0);
} /* main() */
-
Hallo blackheim,
sieht doch schon nicht schlecht aus. Du musst nun lediglich nach dem Einlesen der Benutzereingabe diese überprüfen. Wenn diese dann z.B. QUIT ist, beendest du mit "return 0" dein Programm. Als letztes musst du noch eine Schleife um deinen "Eine Zeile lesen, versenden, Echo lesen und ausgeben"-Block setzen damit du mehrere Anfragen hintereinander starten kannst.
-
hallo.
kannst du mal kurz deine vorschläge in meinen code reinbauen ????
ich check das net ganz...vielen vielen dank
-
Was genau verstehst du denn bei Herrmanns Vorschlägen nicht? Für mich klingen sie recht vernünftig
und mach bitte C++ code in deinem ersten beitrag
mfg
c.reiner
-
Na gut hier mal etwas Code:
... ... /* Hier hier angesprochene Schleife */ while ( fgets( buffer, sizeof( buffer ) -1, stdin ) ) { /* Und wird überprüft ob die Eingabe == QUIT ist wenn ja wird der Socket geschlossen und main und damit das Programm verlassen. */ if ( !strcmp( buffer, "QUIT" ) { close( sock_fd ); return 0; }; ... ... }; ... ...
-
yo.
danke
so gehts....das ist so in etwa das was ich wollte
vielen Dank !