Avatar billede freegeg Nybegynder
18. marts 2004 - 04:32 Der er 7 kommentarer og
1 løsning

Winsock client-side simpelt

hvordan kan det være det er umuligt at finde et simpelt stykke kode, med noget C++ script til Win32, der demostrere dette:

connect til ip
loop start

modtager data
{
  sender data
}

loop slut
connect slut

jeg skal bare bruge et så simpelt stykke kode, men kan bare ikke få det sat sammen, da man skal fumle sig igennem MFC kode, og an masse andet, som man aligevel ikke kan bruge :\
Avatar billede danielhep Nybegynder
19. marts 2004 - 10:47 #1
/* tcpClient.c */

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h> /* close */

#define SERVER_PORT 1500
#define MAX_MSG 100

int main (int argc, char *argv[]) {

  int sd, rc, i;
  struct sockaddr_in localAddr, servAddr;
  struct hostent *h;
 
  if(argc < 3) {
    printf("usage: %s <server> <data1> <data2> ... <dataN>\n",argv[0]);
    exit(1);
  }

  h = gethostbyname(argv[1]);
  if(h==NULL) {
    printf("%s: unknown host '%s'\n",argv[0],argv[1]);
    exit(1);
  }

  servAddr.sin_family = h->h_addrtype;
  memcpy((char *) &servAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length);
  servAddr.sin_port = htons(SERVER_PORT);

  /* create socket */
  sd = socket(AF_INET, SOCK_STREAM, 0);
  if(sd<0) {
    perror("cannot open socket ");
    exit(1);
  }

  /* bind any port number */
  localAddr.sin_family = AF_INET;
  localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
  localAddr.sin_port = htons(0);
 
  rc = bind(sd, (struct sockaddr *) &localAddr, sizeof(localAddr));
  if(rc<0) {
    printf("%s: cannot bind port TCP %u\n",argv[0],SERVER_PORT);
    perror("error ");
    exit(1);
  }
               
  /* connect to server */
  rc = connect(sd, (struct sockaddr *) &servAddr, sizeof(servAddr));
  if(rc<0) {
    perror("cannot connect ");
    exit(1);
  }

  for(i=2;i<argc;i++) {
   
    rc = send(sd, argv[i], strlen(argv[i]) + 1, 0);
   
    if(rc<0) {
      perror("cannot send data ");
      close(sd);
      exit(1);
   
    }

    printf("%s: data%u sent (%s)\n",argv[0],i-1,argv[i]);

 
  }

return 0;
 
}
Avatar billede danielhep Nybegynder
19. marts 2004 - 10:47 #2
/* udpClient.c */

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h> /* memset() */
#include <sys/time.h> /* select() */

#define REMOTE_SERVER_PORT 1500
#define MAX_MSG 100


int main(int argc, char *argv[]) {
 
  int sd, rc, i;
  struct sockaddr_in cliAddr, remoteServAddr;
  struct hostent *h;

  /* check command line args */
  if(argc<3) {
    printf("usage : %s <server> <data1> ... <dataN> \n", argv[0]);
    exit(1);
  }

  /* get server IP address (no check if input is IP address or DNS name */
  h = gethostbyname(argv[1]);
  if(h==NULL) {
    printf("%s: unknown host '%s' \n", argv[0], argv[1]);
    exit(1);
  }

  printf("%s: sending data to '%s' (IP : %s) \n", argv[0], h->h_name,
    inet_ntoa(*(struct in_addr *)h->h_addr_list[0]));

  remoteServAddr.sin_family = h->h_addrtype;
  memcpy((char *) &remoteServAddr.sin_addr.s_addr,
    h->h_addr_list[0], h->h_length);
  remoteServAddr.sin_port = htons(REMOTE_SERVER_PORT);

  /* socket creation */
  sd = socket(AF_INET,SOCK_DGRAM,0);
  if(sd<0) {
    printf("%s: cannot open socket \n",argv[0]);
    exit(1);
  }
 
  /* bind any port */
  cliAddr.sin_family = AF_INET;
  cliAddr.sin_addr.s_addr = htonl(INADDR_ANY);
  cliAddr.sin_port = htons(0);
 
  rc = bind(sd, (struct sockaddr *) &cliAddr, sizeof(cliAddr));
  if(rc<0) {
    printf("%s: cannot bind port\n", argv[0]);
    exit(1);
  }


  /* send data */
  for(i=2;i<argc;i++) {
    rc = sendto(sd, argv[i], strlen(argv[i])+1, 0,
        (struct sockaddr *) &remoteServAddr,
        sizeof(remoteServAddr));

    if(rc<0) {
      printf("%s: cannot send data %d \n",argv[0],i-1);
      close(sd);
      exit(1);
    }

  }
 
  return 1;

}
Avatar billede danielhep Nybegynder
19. marts 2004 - 11:06 #3
Det er sådan ca. så simpelt det kan blive hvis der skal være 2 % funktionalitet.
Avatar billede freegeg Nybegynder
24. marts 2004 - 19:09 #4
takker, lige hvad jeg kunne bruge :)

... nu vil jeg overtage verden, og begynde mit onde imperie, muhaha :)

ej... jeg kunne virkeligt bruge det, så du skal have en stor tak
Avatar billede freegeg Nybegynder
24. marts 2004 - 19:10 #5
vis du lige lægger et svar
Avatar billede freegeg Nybegynder
19. april 2004 - 02:12 #6
point?
Avatar billede danielhep Nybegynder
07. maj 2004 - 14:03 #7
hallo....
Avatar billede danielhep Nybegynder
07. maj 2004 - 14:07 #8
luk
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester