Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » int,char,usw. über Internet oder Netzwerk

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
25.01.2004, 12:20 Uhr
RedEagle



Hi
Ich suche ein Tutorial über das veschicken von daten in form von strings oder zahlen über das internet (oder Netzwerk)

Haber schon viel gesucht, aber immer nur "schrott" gefunden, der Nicht erklärt ist, oder indem ganze teile durch z.B. /*Hir xy einfügen */ ersetzt wurde

ps:
sys = Windows 98
editor = DEV-CPP (auch Compiler)
I.zug. = T.-DSL
lang = C++


#### WICHTIG: ··· ES MUSS EINE KONSOLEN-ANWENDUNG SEIN!! ···
--
MFG RedEagle

Dieser Post wurde am 25.01.2004 um 12:24 Uhr von RedEagle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.01.2004, 13:24 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Man braucht normalerweise immer "2 Anwendungen". d.h Client und Server (welche natürlich in einer Anwendung integriert sein können die dann z.b unterschiedlich aufgebaut ist)

in Konsolenanwendung wird es etwas kompliziert einen Server zu erstellen, da standardmäßig die Sockets blockieren, d.h wenn man z.b was empfangen will bleibt das programm an dieser stelle stehen bis soviel empfangen werden kann wie man angegeben hat.

Ich bau hier mal schnell einen zusammen, keine Garantie auf Funktionalität oder etwaige Syntaxfehler!

C++:
#include <windows.h>
#include <iostream>

#define SERVER_PORT 20000

int main(void)
{
  WSADATA wsa;
  static struct sockaddr_in sa;
  SOCKADDR_IN ca;
  fd_set rfds;
  struct timeval tv;
  
  // WSAStartup ist obligatorisch
  if(WSAStartup(MAKEWORD(2,0),&wsa)!=0)
  {
    std::cerr << "WSAStartup failure" << std::endl;
    WSACleanup();
    return 1;
  }

  SOCKET Server, Client;

  Server = socket(AF_INET,SOCK_STREAM,0);
  if(Server==INVALID_SOCKET)
  {
    std::cerr << "Server Socket creation failed" << std::endl;
    WSACleanup();
    return 1;
  }

  sa.sin_family=AF_INET;
    sa.sin_port=htons(SERVER_PORT);
  sa.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

    // Hier wird die adresse mit dem socket gebunden
    if(bind(Server,(SOCKADDR*)&sa,sizeof(SOCKADDR_IN))==SOCKET_ERROR)
  {
     std::cerr << "Server Socket bind failed" << std::endl;
     WSACleanup();
     return 1;
  }
    
    // Setze Socket auf "Warte auf Verbindungen"
    if(listen(Server,5)==SOCKET_ERROR)
  {
     std::cerr << "Server Socket listen failed" << std::endl;
     WSACleanup();
     return 1;
  }

  bool connection = false;
  for(;;) // Auf Verbindungen warten
  {
    // Timeout des Sockets setzen
    FD_ZERO(&rfds);
    FD_SET(m_Server, &rfds);
    tv.tv_sec = 2; // 2 Sekunden
    tv.tv_usec = 0;
  
    int iSelect = select( ((int)Server)+1, &rfds, NULL, NULL, &tv);
    if( SOCKET_ERROR == iSelect )
    {
      std::cerr << "Fehler: select fehlgeschlagen" << std::endl;
      WSACleanup();
      return 1;
    }
    if(FD_ISSET(Server,&rfds)) // Wenn Daten/Verbindung da sind/ist
    {
      if(connection) // Ja wir haben eine Verbindung
      {
        char cmd[501];
        int readen = recv(Server,cmd,500,0);
        cmd[readen] = '\0';
        std::cout << cmd << std::endl;
      }
      else
      {
        Client = accept(Server);
        if(INVALID_SOCKET == Client)
        {
          std::cerr << "Accepting Connection failed" << std::endl;
          Client = 0;
        }
        else
          connection = true; // nun haben wir eine Verbindung!
      }
    }
  }
  if(connection)
    closesocket(Client);
  closesocket(Server);
  WSACleanup();
  return 0;
}




Client kommt gleich :)
--
class God : public ChuckNorris { };

Dieser Post wurde am 25.01.2004 um 13:24 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.01.2004, 13:37 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hier ist der Client:


C++:
#include <windows.h>
#include <iostream>

#define SERVER_IP "127.0.0.1"
#define SERVER_PORT 20000

int main(void)
{
  WSADATA wsa;
  static struct sockaddr_in sa;
  SOCKADDR_IN ca;
  fd_set wfds;
  struct timeval tv;
  
  // WSAStartup ist obligatorisch
  if(WSAStartup(MAKEWORD(2,0),&wsa)!=0)
  {
    std::cerr << "WSAStartup failure" << std::endl;
    WSACleanup();
    return 1;
  }

  SOCKET Client;

  Client = socket(AF_INET,SOCK_STREAM,0);
  if(Client == INVALID_SOCKET)
  {
    std::cerr << "Client Socket creation failed" << std::endl;
    WSACleanup();
    return 1;
  }
  
  sa.sin_family=AF_INET;
    sa.sin_port=htons(SERVER_PORT);
    sa.sin_addr.S_un.S_addr=inet_addr(SERVER_IP);

    connect(Client,(SOCKADDR*)&sa,sizeof(sa));

  for(;;) // Auf Verbindungen warten
  {
    // Timeout des Sockets setzen
    FD_ZERO(&wfds);
    FD_SET(Client, &wfds);
    tv.tv_sec = 2; // 2 Sekunden
    tv.tv_usec = 0;
  
    int iSelect = select( ((int)Client)+1, NULL, &wfds, NULL, &tv); // (Parameter: Socket, Readable, Writeable, Error, Timeout)
    if( SOCKET_ERROR == iSelect )
    {
      std::cerr << "Fehler: select fehlgeschlagen" << std::endl;
      WSACleanup();
      return 1;
    }
    if(FD_ISSET(Client,&wfds)) // Wenn Verbindung da ist
    {
      for(;;)
      {
        char cmd[501];
        std::cout << "Verbindung hergestellt, max 500 Zeichen eingeben! (exit zum Beenden)" << std::endl;
        std::cin.getline(cmd,500);
        if(strcmp(cmd,"exit")==0)
          break;
        std::cout << send(Client,cmd,strlen(cmd),0) << " von " << strlen(cmd) << "Zeichen versendet" << std::endl;
      }
      break;
    }
  }
  
  closesocket(Client);
  WSACleanup();
  return 0;
}



Alles ungetestet, also falls was nicht funzt ... :):):)
--
class God : public ChuckNorris { };

Dieser Post wurde am 25.01.2004 um 13:37 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.01.2004, 13:38 Uhr
RedEagle




es gibt aber noch 2 Probleme in dem Code vom server:

57 Client = accept(Server); //`m_Server' (Each undeclared
79 Client = accept(Server); //too few arguments at this point
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.01.2004, 13:40 Uhr
RedEagle



bein client gibts sehr viele [Linker errors]
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.01.2004, 13:41 Uhr
RedEagle



Kann es vielleicht sein, dass ich irgendwo die IP ändern muss (z.B meine IP eintragen ???
Und muss amn nicht winsock2.h irgendwo includieren???
--
MFG RedEagle

Dieser Post wurde am 25.01.2004 um 13:43 Uhr von RedEagle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
25.01.2004, 13:44 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


das hier beim server ist ein tippfehler:


C++:
FD_SET(m_Server, &rfds);



muss natürlich


C++:
FD_SET(Server, &rfds);



heißen.
und das


C++:
Client = accept(Server);



muss natürlich


C++:
Client = accept(Server,NULL,NULL);



heißen.

Fürn Clienten, hmm welche Linkermeldungen bringt er dir denn?

hast du die wsock32.lib mitgelinkt? die braucht er nämlich
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
25.01.2004, 13:51 Uhr
RedEagle



1. beim server gibts auch Linker errors
2. wie kann ich die Mitlinken????

PS: Der berichtigte Code währe was nettes im FAQ - bereich
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
25.01.2004, 13:59 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


#pragma comment(lib,"wsock32")

nach den includes rein
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
25.01.2004, 14:02 Uhr
RedEagle



Habe ich gemacht, und die errore treten immernoch auch (server und client haben die selben errors)
einige beginnen mit WSA

PS: was ist denn mit der IP??? Muss ich da nicht meine IP eintragen???
--
MFG RedEagle

Dieser Post wurde am 25.01.2004 um 14:04 Uhr von RedEagle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: