TcpListener liest und schreibt Integer werte

pohler

Grünschnabel
hallo,
ich habe mehrere stunden damit zugebracht aus dem bestehenden beispiel des TcpListeners der msdn seite integer statt strings zu lesen. leider ohne erfolg. nochmal das beispiel:

Code:
#using <System.dll>

using namespace System;
using namespace System::IO;
using namespace System::Net;
using namespace System::Net::Sockets;
using namespace System::Text;
using namespace System::Threading;
void main()
{
   try
   {
      
      // Set the TcpListener on port 13000.
      Int32 port = 13000;
      IPAddress^ localAddr = IPAddress::Parse( "127.0.0.1" );
      
      // TcpListener* server = new TcpListener(port);
      TcpListener^ server = gcnew TcpListener( localAddr,port );
      
      // Start listening for client requests.
      server->Start();
      
      // Buffer for reading data
      array<Byte>^bytes = gcnew array<Byte>(256);
      String^ data = nullptr;
      
      // Enter the listening loop.
      while ( true )
      {
         Console::Write( "Waiting for a connection... " );
         
         // Perform a blocking call to accept requests.
         // You could also user server.AcceptSocket() here.
         TcpClient^ client = server->AcceptTcpClient();
         Console::WriteLine( "Connected!" );
         data = nullptr;
         
         // Get a stream Object* for reading and writing
         NetworkStream^ stream = client->GetStream();
         Int32 i;
         
         // Loop to receive all the data sent by the client.
         while ( i = stream->Read( bytes, 0, bytes->Length ) )
         {
            
            // Translate data bytes to a ASCII String*.
            data = Text::Encoding::ASCII->GetString( bytes, 0, i );
            Console::WriteLine( "Received: {0}", data );
            
            // Process the data sent by the client.
            data = data->ToUpper();
            array<Byte>^msg = Text::Encoding::ASCII->GetBytes( data );
            
            // Send back a response.
            stream->Write( msg, 0, msg->Length );
            Console::WriteLine( "Sent: {0}", data );
         }
         
         // Shutdown and end connection
         client->Close();
      }
   }
   catch ( SocketException^ e ) 
   {
      Console::WriteLine( "SocketException: {0}", e );
   }

   Console::WriteLine( "\nHit enter to continue..." );
   Console::Read();
}

also, hier werden strings aus einem stream gelesen, in großbuchstaben gewandelt und wieder rausgeschrieben.
nur ich hätte gern integer werte gelesen und geschrieben. ich hoffe, jemand ist so fit und kann mir da weiterhelfen.

schon mal tausend dank im voraus

viele grüße
 
Hallo pohler!

Wenn Du int Werte versenden willst, schreibst
C#:
string myString = myInt.ToString();
um die String-Repräsentation deinses Wertes zu erhalten.

Anders herrum musst die System.Convert Klasse verwenden.
C#:
int myInt = Convert.ToInt32( myString );

Ich würde Dir empfehlen ein eigenes Protokoll zu Stricken. Damit Du nicht den ganzen String
nach irgend welchen Zahlen absuchen musst. Was zudem einen sinnlosen Overhead bedeuten würde.

Aber erzähl uns doch mal was Du eigentlich machen willst? Es gäbe noch 2 Weitere Varianten,
mit deren Hilfe mann Daten versenden kann. Und für jedes Scenario eigenet eine bestimmt Variante am besten...
Nicht das der Aufwand den Nutzen überwiegt...
 
hallo,
so wie du es meintest, wäre es doch viel zu einfach.
ich bekomme integer werte aus eyesweb (habe damit einen patch zum tracken einer szene erstellt). man kann mit eyesweb die koordinaten der getrackten person bestimmen. ich brauche in dem fall nur die x werte. diese x-werte werden über einen SendToNetwork block aus eyesweb verschickt. alles passiert auf localhost. die werte, die ich dann aus eyesweb bekomme, sollen an eine lichtsteuerungssoftware geschickt werden bzw. soll der TcpListener als schnittstelle zwichen eyesweb und der lichtsteuerung dienen. die x-werte kommen dann in die lichtsteuerungssoftware rein und veranlassen fader dazu, lichtleisten zu steuern. kannst du dir ungefähr vorstellen, was ich vorhabe? ;-)
vielleicht hast du ja auch noch eine bessere variante.
ich brauche leider c++ .net, weil ich mit java noch größere umwege gehen müsste.

viele grüße
 
Du könntest das Ganze ja auch in c# implementieren. ;-)

Gut, da ich jetzt über dein Vorhaben Bescheid weiss, kann ich Dir jetzt auch bessere Infos geben. ;)

Such mal nach der HttpWebRequest Klasse. Die sollte deinen Anforderungen genügen.

Damit kannst dir das HTML holen und es anschließend mittels Regex nach den Gewünschten Werten parsen.
Such mal hier im Forum danach...

Von Regex hast sicher schon gehört, oder? The 30 Minute Regex Tutorial - The Code Project
 
Oh sorry,
das war mir nicht klar. Ich werd mich daran halten. Stimmt ja auch, ist viel übersichtlicher.

Okay, das andere Problem hat sich geklärt. Ich habe das ganze Ding als Klasse umgeschrieben. Darin befinden sich jetzt zwei Methoden, die für die Kommunikation zuständig sind, plus eine, die sich um das Parsen der Integer-Werte kümmert. Was die parseint() genau macht, kannst du mir vielleicht sagen, ich muss gestehen, ich hab sie so im Netz in einer Java-Klasse gefunden. ;)

Code:
int parseint(byte buf[],int offset)  {

    int b3=buf[offset+3]& 0xff;
    int b2=buf[offset+2]& 0xff;
    int b1=buf[offset+1]& 0xff;
    int b0=buf[offset]& 0xff;

    int val=b3<<24 | b2<<16 | b1<<8 | b0;

    return(val);
}
 

Neue Beiträge

Zurück