Sockets : data[0] und "quit" vergleichen!

Hi!

Ich habe mich mal an Sockets rangesetzt, weiss allerdings nicht, wie ich Vergleichen soll(Befehle)
Code:
#include "ServerSocket.h"
#include "SocketException.h"
#include <string>
#include <iostream>
int main ( int argc, int argv[] )
{
  std::cout << "running....\n";

  try
    {
      // Create the socket
      ServerSocket server ( 30000 );

      while ( true )
	{

	  ServerSocket new_sock;
	  server.accept ( new_sock );
		char *end;
	  try
	    {
	      while ( true )
		{
		  end= "";
		  std::string data;
		  new_sock >> data;
		  if(strcmp(data[0],"quit")==0)
		  {
			return 0;
			}
		  else if(strcmp(data[0],"echo")==0)
		  {end = data[1];}
		  else
		  {std::cout << "Invalid Command!\n";}





		  //ausgabe:
		  new_sock << end;
		}
	    }
	  catch ( SocketException& ) {}

	}
    }
  catch ( SocketException& e )
    {
      std::cout << "Exception was caught:" << e.description() << "\nExiting.\n";
    }

  return 0;
}

Es kommt allerdings immer:
simple_server_main.cpp: In function ?int main(int, int*)?:
simple_server_main.cpp:27: error: ISO C++ forbids comparison between pointer and integer
simple_server_main.cpp:31: error: ISO C++ forbids comparison between pointer and integer
simple_server_main.cpp:32: error: invalid conversion from ?char? to ?char*?


Was kann ich tun ?(
 
std::string data;
Hier deklarierst du data als string.
strcmp(data[0],"echo")==0
Hier vergleichst du einen Zeiger data[0] auf das erste Element eines data Arrays mit "quit", daraus resultiert dein Fehler. Lass das [0] weg dann gehts.
 
BM@linux:~/sockets> make
g++ -c -o simple_server_main.o simple_server_main.cpp
simple_server_main.cpp: In function ?int main(int, int*)?:
simple_server_main.cpp:27: error: cannot convert ?std::string? to ?const char*? for argument ?1? to ?int strcmp(const char*, const char*)?
simple_server_main.cpp:31: error: cannot convert ?std::string? to ?const char*? for argument ?1? to ?int strcmp(const char*, const char*)?
simple_server_main.cpp:32: error: invalid conversion from ?char? to ?char*?
make: *** [simple_server_main.o] Fehler 1
BM@linux:~/sockets>
 
strcmp ist für cstrings. so sollte es trotzdem mit strcmp funktionieren:

Code:
if(strcmp(data.c_str(),"quit")==0)
aber da du c++ strings benutzt, kannst du es auch gleich so machen:

Code:
if( "quit" == data )
 
simple_client_main.cpp: In function ?int main(int, int*)?:
simple_client_main.cpp:23: error: no matching function for call to ?std::basic_istream<char, std::char_traits<char> >::get(char [256])?
/usr/include/c++/4.0.2/istream:273: note: candidates are: typename std::basic_istream<_CharT, _Traits>::int_type std::basic_istream<_CharT, _Traits>::get() [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.0.2/istream:287: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::get(_CharT&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.0.2/istream:314: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::get(_CharT*, std::streamsize, _CharT) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.0.2/istream:325: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::get(_CharT*, std::streamsize) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.0.2/istream:348: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::get(std::basic_streambuf<_CharT, _Traits>&, _CharT) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.0.2/istream:358: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::get(std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char, _Traits = std::char_traits<char>]
make: *** [simple_client_main.o] Fehler 1

--------------------------------------------------------------------------------------
Son shit
 
jetzt ist die fehlermeldung in der datei "simple_client_main.cpp" und nicht "simple_server_main.cpp"
zeig mal den entsprechenden quellcode her.
 
Code:
#include "ClientSocket.h"
#include "SocketException.h"
#include <iostream>
#include <string>


char temp[256];
int main ( int argc, int argv[] )
{
  try
    {

      ClientSocket client_socket ( "localhost", 30000 );

      std::string reply;

      try
	{
	  while(true)
	  {
	  
	  std::cout <<"\nBitte den zu sendenen Befehl eingeben:\n";
	  std::cin >> temp;
	  client_socket << temp;
	  client_socket >> reply;
	  std::cout <<"\n"<<reply;

	  
	  }
}
      catch ( SocketException& ) {}

      std::cout << "We received this response from the server:\n\"" << reply << "\"\n";;

    }
  catch ( SocketException& e )
    {
      std::cout << "Exception was caught:" << e.description() << "\n";
    }

  return 0;
}

Es klappt?! Hab den Code was verändert gehabt!



THX

Allerdings geht der server bei
if(strcmp(data.c_str(),"quit")==0) {
return 0;
}
nicht aus!

Wie mach ich dassß??
 
Zurück
Oben