<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Wie kann ich bei diesem Programm interger Zahlen versenden?]]></title><description><![CDATA[<p>Servus mein Name ist Tim und bin ein absoluter Neuling in Sachen Netzwerkprogrammierung. Ich habe folgenden Quellcolde hier aus einem Buch geholt womit man Nachrichten versenden kann. Nun möchte ich das er aber Werte z.b. interger versendet. Was muss ich da ändern damit das geht? (Nicht über den Quellcode erschrecken! )</p>
<pre><code class="language-cpp">// socket.cpp
#include &lt;cstdlib&gt;
#include &lt;winsock.h&gt;
#include &lt;io.h&gt;
#include &lt;iostream&gt;
#include &quot;socket.h&quot;
using namespace std;

// Konstruktor
Socket::Socket() : m_sock(0) {
   // Winsock.DLL Initialisieren
   WORD wVersionRequested;
   WSADATA wsaData;
   wVersionRequested = MAKEWORD (1, 1);
   if (WSAStartup (wVersionRequested, &amp;wsaData) != 0) {
      cout &lt;&lt; &quot;Fehler beim Initialisieren von Winsock&quot; 
           &lt;&lt; endl;
      exit(1);
   }
}

// Destruktor
Socket::~Socket() {
   if ( is_valid() )
      ::closesocket ( m_sock );
}

// Erzeugt das Socket  - TCP
bool Socket::create() {
   m_sock = ::socket(AF_INET,SOCK_STREAM,0);
   if (m_sock &lt; 0) {
      cout &lt;&lt; &quot;Fehler beim Anlegen eines Socket&quot; &lt;&lt; endl;
      exit(1);
   }
   return true;
}

// Erzeugt das Socket  - UDP
bool Socket::UDP_create() {
   m_sock = ::socket(AF_INET,SOCK_DGRAM,0);
   if (m_sock &lt; 0) {
      cout &lt;&lt; &quot;Fehler beim Anlegen eines Socket&quot; &lt;&lt; endl;
      exit(1);
   }
}

// Erzeugt die Bindung an die Serveradresse
// - genauer an einen bestimmten Port
bool Socket::bind( const int port ) {
   if ( ! is_valid() ) {
      return false;
   }
   m_addr.sin_family = AF_INET;
   m_addr.sin_addr.s_addr = INADDR_ANY;
   m_addr.sin_port = htons ( port );

   int bind_return = ::bind ( m_sock,
      ( struct sockaddr * ) &amp;m_addr, sizeof ( m_addr ) );
   if ( bind_return == -1 ) {
      return false;
   }
   return true;     
}

// Teile dem Socket mit, dass Verbindungswünsche
// von Clients entgegengenommen werden
bool Socket::listen() const {
   if ( ! is_valid() ) {
      return false;
   }
   int listen_return = ::listen ( m_sock, MAXCONNECTIONS );
   if ( listen_return == -1 ) {
      return false;
   }
  return true;
}

// Bearbeite die Verbindungswünsche von Clients
// Der Aufruf von accept() blockiert solange,
// bis ein Client Verbindung aufnimmt
bool Socket::accept ( Socket&amp; new_socket ) const {
   int addr_length = sizeof ( m_addr );
   new_socket.m_sock = ::accept( m_sock,
      ( sockaddr * ) &amp;m_addr, ( int * ) &amp;addr_length );
   if ( new_socket.m_sock &lt;= 0 )
      return false;
   else
      return true;
}

// Baut die Verbindung zum Server auf
bool Socket::connect( const string host, const int port ) {
   if ( ! is_valid() )
      return false;      
   struct hostent *host_info;
   unsigned long addr;
   memset( &amp;m_addr, 0, sizeof (m_addr));
   if ((addr = inet_addr( host.c_str() )) != INADDR_NONE) {
       /* argv[1] ist eine numerische IP-Adresse */
       memcpy( (char *)&amp;m_addr.sin_addr,
               &amp;addr, sizeof(addr));
   }
   else {
       /* Für den Fall der Fälle: Wandle den Servernamen  *
        * bspw. &quot;localhost&quot; in eine IP-Adresse um         */
       host_info = gethostbyname( host.c_str() );
       if (NULL == host_info) {
          cout &lt;&lt; &quot;Unbekannter Server&quot; &lt;&lt; endl;
          exit(1);
       }
       memcpy( (char *)&amp;m_addr.sin_addr, host_info-&gt;h_addr,
                host_info-&gt;h_length);
   }
   m_addr.sin_family = AF_INET;
   m_addr.sin_port = htons( port );      

   int status = ::connect ( m_sock,
      ( sockaddr * ) &amp;m_addr, sizeof ( m_addr ) );

  if ( status == 0 )
    return true;
  else
    return false;
}

// Daten versenden via TCP
bool Socket::send( const string s ) const {
   int status = ::send ( m_sock, s.c_str(), s.size(),  0 );
   if ( status == -1 ) {
      return false;
   }
   else {
      return true;
   }
}

// Daten empfangen via TCP
int Socket::recv ( string&amp; s ) const {
  char buf [ MAXRECV + 1 ];
  s = &quot;&quot;;
  memset ( buf, 0, MAXRECV + 1 );

  int status = ::recv ( m_sock, buf, MAXRECV, 0 );
  if ( status &gt; 0 || status != SOCKET_ERROR ) {
     s = buf;
     return status;
  }
  else {
     cout &lt;&lt; &quot;Fehler in Socket::recv&quot; &lt;&lt; endl;
     exit(1);
     return 0;
  } 
}

// Daten versenden via UDP
bool Socket::UDP_send( const string addr, const string s, const int port ) const {
   struct sockaddr_in addr_sento;
   struct hostent *h;
   int rc;

   h = gethostbyname(addr.c_str());
   if (h == NULL) {
      cout &lt;&lt; &quot;Unbekannter Host?&quot; &lt;&lt; endl;
      exit(1);
   }
   addr_sento.sin_family = h-&gt;h_addrtype;
   memcpy ( (char *) &amp;addr_sento.sin_addr.s_addr,
            h-&gt;h_addr_list[0], h-&gt;h_length);
   addr_sento.sin_port = htons (port);
   rc = sendto( m_sock, s.c_str(), s.size(), 0,
                 (struct sockaddr *) &amp;addr_sento,
                  sizeof (addr_sento));
   if (rc == SOCKET_ERROR) {
      cout &lt;&lt; &quot;Konnte Daten nicht senden - sendto()&quot; 
           &lt;&lt; endl;
      exit(1);
   }        
   return true;
}

// Daten empfangen vie UDP
int Socket::UDP_recv( string&amp; s ) const {
   struct sockaddr_in addr_recvfrom;
   int len, n;
   char buf [ MAXRECV + 1 ];
   s = &quot;&quot;;
   memset ( buf, 0, MAXRECV + 1 );
   len = sizeof (addr_recvfrom);
   n = recvfrom ( m_sock, buf, MAXRECV, 0,
                  (struct sockaddr *) &amp;addr_recvfrom, &amp;len );
   if (n == SOCKET_ERROR){
      cout &lt;&lt; &quot;Fehler bei recvfrom()&quot; &lt;&lt; endl;
      exit(1);
      return 0;
   }
   else {
      s = buf;
      return n;
   } 
}

// Winsock.dll freigeben
void Socket::cleanup() const {
   /* Cleanup Winsock */
   WSACleanup();
}

// Socket schließen und Winsock.dll freigeben
bool Socket::close() const {
   closesocket(m_sock);
   cleanup();
   return true;
}
</code></pre>
<pre><code class="language-cpp">/* socket.h für MS-Windows */
#ifndef SOCKET_H_
#define SOCKET_H_
#include &lt;string&gt;
#include &lt;winsock.h&gt;
#include &lt;io.h&gt;
using namespace std;

// Max. Anzahl Verbindungen
const int MAXCONNECTIONS = 5;
// Max. Anzahl an Daten die aufeinmal empfangen werden
const int MAXRECV = 1024;

// Die Klasse Socket
class Socket {
   private:
   // Socketnummer (Socket-Deskriptor)           
   int m_sock; 
   // Struktur sockaddr_in
   sockaddr_in m_addr;

   public:
   // Konstruktor
   Socket();
   // virtueller Destruktor
   virtual ~Socket();

   // Socket erstellen - TCP
   bool create();
   // Socket erstellen - UDP
   bool UDP_create();
   bool bind( const int port );
   bool listen() const;
   bool accept( Socket&amp; ) const;
   bool connect ( const string host, const int port );
   // Datenübertragung - TCP
   bool send ( const string ) const;
   int recv ( string&amp; ) const;
   // Datenübertragung - UDP
   bool UDP_send( const string, const string,
                  const int port ) const;
   int UDP_recv( string&amp; ) const;
   // Socket schließen
   bool close() const;
   // WSAcleanup()
   void cleanup() const;
   bool is_valid() const { return m_sock != -1; }
};
#endif
</code></pre>
<pre><code class="language-cpp">// echo_client.cpp
#include &quot;socket.h&quot;
#include &quot;socket.cpp&quot;
#include &lt;string&gt;
#include &lt;iostream&gt;
using namespace std;

int main (int argc, char *argv[]) {
   if( argc &lt; 2 ){
      cout &lt;&lt; &quot;Usage: &quot; &lt;&lt; *argv &lt;&lt; &quot; ServerAdresse\n&quot;;
      exit(1);
   }
   Socket sock;
   sock.create();
   // Adresse des Servers
   string argv_1 = argv[1];
   // Mit dem Server auf Port 15000 verbinden
   sock.connect( argv_1, 15000 );
   cout &lt;&lt; &quot;Nachricht an den Server: &quot;;
   string s;
   getline(cin, s, '\n' );
   sock.send( s );
   sock.close();
   return 0;
}
</code></pre>
<pre><code class="language-cpp">// echo_server.cpp
#include &quot;socket.h&quot;
#include &lt;string&gt;
#include &lt;iostream&gt;
using namespace std;

int main (void) {
   Socket sock1;
   sock1.create();
   // Wir verwenden Port 15000
   sock1.bind(15000);
   sock1.listen();
   while (true) {
      Socket sock2;
      sock1.accept( sock2 ); 
      string s;
      sock2.recv (s);
      cout &lt;&lt; &quot;Nachricht von Client erhalten: &quot;;
      cout &lt;&lt; s &lt;&lt; endl;
      sock2.close();
   }
  sock1.close();
  return 0;
}
</code></pre>
<p>Bitte hoffentlich kann mir einer Helfen. Ich weiß das das hier abschreckt, aber ich hoffe denoch!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/251902/wie-kann-ich-bei-diesem-programm-interger-zahlen-versenden</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 06:02:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/251902.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 12 Oct 2009 11:34:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie kann ich bei diesem Programm interger Zahlen versenden? on Mon, 12 Oct 2009 11:34:05 GMT]]></title><description><![CDATA[<p>Servus mein Name ist Tim und bin ein absoluter Neuling in Sachen Netzwerkprogrammierung. Ich habe folgenden Quellcolde hier aus einem Buch geholt womit man Nachrichten versenden kann. Nun möchte ich das er aber Werte z.b. interger versendet. Was muss ich da ändern damit das geht? (Nicht über den Quellcode erschrecken! )</p>
<pre><code class="language-cpp">// socket.cpp
#include &lt;cstdlib&gt;
#include &lt;winsock.h&gt;
#include &lt;io.h&gt;
#include &lt;iostream&gt;
#include &quot;socket.h&quot;
using namespace std;

// Konstruktor
Socket::Socket() : m_sock(0) {
   // Winsock.DLL Initialisieren
   WORD wVersionRequested;
   WSADATA wsaData;
   wVersionRequested = MAKEWORD (1, 1);
   if (WSAStartup (wVersionRequested, &amp;wsaData) != 0) {
      cout &lt;&lt; &quot;Fehler beim Initialisieren von Winsock&quot; 
           &lt;&lt; endl;
      exit(1);
   }
}

// Destruktor
Socket::~Socket() {
   if ( is_valid() )
      ::closesocket ( m_sock );
}

// Erzeugt das Socket  - TCP
bool Socket::create() {
   m_sock = ::socket(AF_INET,SOCK_STREAM,0);
   if (m_sock &lt; 0) {
      cout &lt;&lt; &quot;Fehler beim Anlegen eines Socket&quot; &lt;&lt; endl;
      exit(1);
   }
   return true;
}

// Erzeugt das Socket  - UDP
bool Socket::UDP_create() {
   m_sock = ::socket(AF_INET,SOCK_DGRAM,0);
   if (m_sock &lt; 0) {
      cout &lt;&lt; &quot;Fehler beim Anlegen eines Socket&quot; &lt;&lt; endl;
      exit(1);
   }
}

// Erzeugt die Bindung an die Serveradresse
// - genauer an einen bestimmten Port
bool Socket::bind( const int port ) {
   if ( ! is_valid() ) {
      return false;
   }
   m_addr.sin_family = AF_INET;
   m_addr.sin_addr.s_addr = INADDR_ANY;
   m_addr.sin_port = htons ( port );

   int bind_return = ::bind ( m_sock,
      ( struct sockaddr * ) &amp;m_addr, sizeof ( m_addr ) );
   if ( bind_return == -1 ) {
      return false;
   }
   return true;     
}

// Teile dem Socket mit, dass Verbindungswünsche
// von Clients entgegengenommen werden
bool Socket::listen() const {
   if ( ! is_valid() ) {
      return false;
   }
   int listen_return = ::listen ( m_sock, MAXCONNECTIONS );
   if ( listen_return == -1 ) {
      return false;
   }
  return true;
}

// Bearbeite die Verbindungswünsche von Clients
// Der Aufruf von accept() blockiert solange,
// bis ein Client Verbindung aufnimmt
bool Socket::accept ( Socket&amp; new_socket ) const {
   int addr_length = sizeof ( m_addr );
   new_socket.m_sock = ::accept( m_sock,
      ( sockaddr * ) &amp;m_addr, ( int * ) &amp;addr_length );
   if ( new_socket.m_sock &lt;= 0 )
      return false;
   else
      return true;
}

// Baut die Verbindung zum Server auf
bool Socket::connect( const string host, const int port ) {
   if ( ! is_valid() )
      return false;      
   struct hostent *host_info;
   unsigned long addr;
   memset( &amp;m_addr, 0, sizeof (m_addr));
   if ((addr = inet_addr( host.c_str() )) != INADDR_NONE) {
       /* argv[1] ist eine numerische IP-Adresse */
       memcpy( (char *)&amp;m_addr.sin_addr,
               &amp;addr, sizeof(addr));
   }
   else {
       /* Für den Fall der Fälle: Wandle den Servernamen  *
        * bspw. &quot;localhost&quot; in eine IP-Adresse um         */
       host_info = gethostbyname( host.c_str() );
       if (NULL == host_info) {
          cout &lt;&lt; &quot;Unbekannter Server&quot; &lt;&lt; endl;
          exit(1);
       }
       memcpy( (char *)&amp;m_addr.sin_addr, host_info-&gt;h_addr,
                host_info-&gt;h_length);
   }
   m_addr.sin_family = AF_INET;
   m_addr.sin_port = htons( port );      

   int status = ::connect ( m_sock,
      ( sockaddr * ) &amp;m_addr, sizeof ( m_addr ) );

  if ( status == 0 )
    return true;
  else
    return false;
}

// Daten versenden via TCP
bool Socket::send( const string s ) const {
   int status = ::send ( m_sock, s.c_str(), s.size(),  0 );
   if ( status == -1 ) {
      return false;
   }
   else {
      return true;
   }
}

// Daten empfangen via TCP
int Socket::recv ( string&amp; s ) const {
  char buf [ MAXRECV + 1 ];
  s = &quot;&quot;;
  memset ( buf, 0, MAXRECV + 1 );

  int status = ::recv ( m_sock, buf, MAXRECV, 0 );
  if ( status &gt; 0 || status != SOCKET_ERROR ) {
     s = buf;
     return status;
  }
  else {
     cout &lt;&lt; &quot;Fehler in Socket::recv&quot; &lt;&lt; endl;
     exit(1);
     return 0;
  } 
}

// Daten versenden via UDP
bool Socket::UDP_send( const string addr, const string s, const int port ) const {
   struct sockaddr_in addr_sento;
   struct hostent *h;
   int rc;

   h = gethostbyname(addr.c_str());
   if (h == NULL) {
      cout &lt;&lt; &quot;Unbekannter Host?&quot; &lt;&lt; endl;
      exit(1);
   }
   addr_sento.sin_family = h-&gt;h_addrtype;
   memcpy ( (char *) &amp;addr_sento.sin_addr.s_addr,
            h-&gt;h_addr_list[0], h-&gt;h_length);
   addr_sento.sin_port = htons (port);
   rc = sendto( m_sock, s.c_str(), s.size(), 0,
                 (struct sockaddr *) &amp;addr_sento,
                  sizeof (addr_sento));
   if (rc == SOCKET_ERROR) {
      cout &lt;&lt; &quot;Konnte Daten nicht senden - sendto()&quot; 
           &lt;&lt; endl;
      exit(1);
   }        
   return true;
}

// Daten empfangen vie UDP
int Socket::UDP_recv( string&amp; s ) const {
   struct sockaddr_in addr_recvfrom;
   int len, n;
   char buf [ MAXRECV + 1 ];
   s = &quot;&quot;;
   memset ( buf, 0, MAXRECV + 1 );
   len = sizeof (addr_recvfrom);
   n = recvfrom ( m_sock, buf, MAXRECV, 0,
                  (struct sockaddr *) &amp;addr_recvfrom, &amp;len );
   if (n == SOCKET_ERROR){
      cout &lt;&lt; &quot;Fehler bei recvfrom()&quot; &lt;&lt; endl;
      exit(1);
      return 0;
   }
   else {
      s = buf;
      return n;
   } 
}

// Winsock.dll freigeben
void Socket::cleanup() const {
   /* Cleanup Winsock */
   WSACleanup();
}

// Socket schließen und Winsock.dll freigeben
bool Socket::close() const {
   closesocket(m_sock);
   cleanup();
   return true;
}
</code></pre>
<pre><code class="language-cpp">/* socket.h für MS-Windows */
#ifndef SOCKET_H_
#define SOCKET_H_
#include &lt;string&gt;
#include &lt;winsock.h&gt;
#include &lt;io.h&gt;
using namespace std;

// Max. Anzahl Verbindungen
const int MAXCONNECTIONS = 5;
// Max. Anzahl an Daten die aufeinmal empfangen werden
const int MAXRECV = 1024;

// Die Klasse Socket
class Socket {
   private:
   // Socketnummer (Socket-Deskriptor)           
   int m_sock; 
   // Struktur sockaddr_in
   sockaddr_in m_addr;

   public:
   // Konstruktor
   Socket();
   // virtueller Destruktor
   virtual ~Socket();

   // Socket erstellen - TCP
   bool create();
   // Socket erstellen - UDP
   bool UDP_create();
   bool bind( const int port );
   bool listen() const;
   bool accept( Socket&amp; ) const;
   bool connect ( const string host, const int port );
   // Datenübertragung - TCP
   bool send ( const string ) const;
   int recv ( string&amp; ) const;
   // Datenübertragung - UDP
   bool UDP_send( const string, const string,
                  const int port ) const;
   int UDP_recv( string&amp; ) const;
   // Socket schließen
   bool close() const;
   // WSAcleanup()
   void cleanup() const;
   bool is_valid() const { return m_sock != -1; }
};
#endif
</code></pre>
<pre><code class="language-cpp">// echo_client.cpp
#include &quot;socket.h&quot;
#include &quot;socket.cpp&quot;
#include &lt;string&gt;
#include &lt;iostream&gt;
using namespace std;

int main (int argc, char *argv[]) {
   if( argc &lt; 2 ){
      cout &lt;&lt; &quot;Usage: &quot; &lt;&lt; *argv &lt;&lt; &quot; ServerAdresse\n&quot;;
      exit(1);
   }
   Socket sock;
   sock.create();
   // Adresse des Servers
   string argv_1 = argv[1];
   // Mit dem Server auf Port 15000 verbinden
   sock.connect( argv_1, 15000 );
   cout &lt;&lt; &quot;Nachricht an den Server: &quot;;
   string s;
   getline(cin, s, '\n' );
   sock.send( s );
   sock.close();
   return 0;
}
</code></pre>
<pre><code class="language-cpp">// echo_server.cpp
#include &quot;socket.h&quot;
#include &lt;string&gt;
#include &lt;iostream&gt;
using namespace std;

int main (void) {
   Socket sock1;
   sock1.create();
   // Wir verwenden Port 15000
   sock1.bind(15000);
   sock1.listen();
   while (true) {
      Socket sock2;
      sock1.accept( sock2 ); 
      string s;
      sock2.recv (s);
      cout &lt;&lt; &quot;Nachricht von Client erhalten: &quot;;
      cout &lt;&lt; s &lt;&lt; endl;
      sock2.close();
   }
  sock1.close();
  return 0;
}
</code></pre>
<p>Bitte hoffentlich kann mir einer Helfen. Ich weiß das das hier abschreckt, aber ich hoffe denoch!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791321</guid><dc:creator><![CDATA[Netzwerk Neuling]]></dc:creator><pubDate>Mon, 12 Oct 2009 11:34:05 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich bei diesem Programm interger Zahlen versenden? on Mon, 12 Oct 2009 12:15:30 GMT]]></title><description><![CDATA[<p>eigtl kommt da nur in strings umwandeln, verschicken und beim empfangen wieder zurück umwandeln in frage</p>
<p>zahlen an sich kann man zwar auch schicken, aber das wird sich kaum lohnen, weil der standard relativ wenig über zahlen vorschreibt, kannst du dich nicht drauf verlassen, dass das ergebnis dann auch richtig interpretiert wird...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791343</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 12 Oct 2009 12:15:30 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich bei diesem Programm interger Zahlen versenden? on Mon, 12 Oct 2009 12:37:59 GMT]]></title><description><![CDATA[<p>Ich habe mir eine Funktion geschrieben, die eine Integer Zahl in einen String umwandelt. Jedoch schickt der die dann nicht. Beim Übersetzen zeigt der weder Warnung noch Fehler an. Aber wie gesagt wenn ich jetzt z.b.</p>
<pre><code class="language-cpp">// echo_client.cpp
#include &quot;socket.h&quot;
#include &quot;socket.cpp&quot;
#include &lt;string&gt;
#include &lt;iostream&gt;
using namespace std;

int main (int argc, char *argv[]) {
   if( argc &lt; 2 ){
      cout &lt;&lt; &quot;Usage: &quot; &lt;&lt; *argv &lt;&lt; &quot; ServerAdresse\n&quot;;
      exit(1);
   }

   char text[]=&quot;Hallo&quot;;

   Socket sock;
   sock.create();
   // Adresse des Servers
   string argv_1 = argv[1];
   // Mit dem Server auf Port 15000 verbinden
   sock.connect( argv_1, 15000 );
   cout &lt;&lt; &quot;Nachricht an den Server: &quot;;
   string s;
   getline(cin, s, '\n' );
   sock.send(text);                             //text anstatt s
   sock.close();
   return 0;
}
</code></pre>
<p>dann gibt das Severprogamm nichts aus.<br />
Woran liegt das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791364</guid><dc:creator><![CDATA[Netzwerk Neuling]]></dc:creator><pubDate>Mon, 12 Oct 2009 12:37:59 GMT</pubDate></item></channel></rss>