Winsock erstellen

    • Winsock erstellen

      Hey Leute,

      ich hab mich drangesetzt und versucht ein Winsock zu proggen (Visual basic 6).
      Es soll Packete lesen (zb. von einem privaten Server; in diesem Fall ein Flyff Pserver) und zurücksenden. Könnt ihr euch mein Code bitte angucken? :D
      Seid nicht so streng, bin noch nicht so gut darin! *_*


      //Main.cpp
      #include <iostream>
      #include "Socket.h"

      using namespace std;

      int main()
      {
      int choice;
      int port = 666;
      //char *ipAddress = "127.0.0.1";
      string ipAddress;
      bool done = false;
      char recMessage[STRLEN];
      char sendMessage[STRLEN];
      cout<<"1) Host server"<<endl;
      cout<<"2) Join server"<<endl;
      cout<<"3) Quit"<<endl;
      cin>>choice;
      if ( choice == 3 )
      exit(0);
      else if ( choice == 2 )
      {
      //Client
      cout<<"Enter an IP address, 127.0.0.1 is the loopback address"<<endl;
      cin>>ipAddress;
      ClientSocket sockClient;
      cout<<"ATTEMPTING TO CONNECT..."<<endl;
      sockClient.ConnectToServer( ipAddress.c_str(), port );
      //Connected
      while ( !done )
      {
      sockClient.GetAndSendMessage();
      cout<<"\t--WAIT--"<<endl;
      sockClient.RecvData( recMessage, STRLEN );
      cout<<"Recv > "<<recMessage<<endl;
      if ( strcmp( recMessage, "end" ) == 0 ||
      strcmp( sendMessage, "end" ) == 0 )
      {
      done = true;
      }
      }
      sockClient.CloseConnection();
      }
      else if ( choice == 1 )
      {
      //SERVER
      ServerSocket sockServer;
      cout<<"HOSTING..."<<endl;
      sockServer.StartHosting( port );
      //Connected
      while ( !done )
      {
      cout<<"\t--WAIT--"<<endl;
      sockServer.RecvData( recMessage, STRLEN );
      cout<<"Recv > "<<recMessage<<endl;
      sockServer.GetAndSendMessage();
      if ( strcmp( recMessage, "end" ) == 0 ||
      strcmp( sendMessage, "end" ) == 0 )
      {
      done = true;
      }
      }
      }
      }





      //Socket.cpp
      #include "Socket.h"

      Socket::Socket()
      {
      if( WSAStartup( MAKEWORD(2, 2), &wsaData ) != NO_ERROR )
      {
      cerr<<"Socket Initialization: Error with WSAStartup\n";
      system("pause");
      WSACleanup();
      exit(10);
      }

      //Create a socket
      mySocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );

      if ( mySocket == INVALID_SOCKET )
      {
      cerr<<"Socket Initialization: Error creating socket"<<endl;
      system("pause");
      WSACleanup();
      exit(11);
      }

      myBackup = mySocket;
      }

      Socket::~Socket()
      {
      WSACleanup();
      }

      bool Socket::SendData( char *buffer )
      {
      send( mySocket, buffer, strlen( buffer ), 0 );
      return true;
      }

      bool Socket::RecvData( char *buffer, int size )
      {
      int i = recv( mySocket, buffer, size, 0 );
      buffer = '\0';
      return true;
      }

      void Socket::CloseConnection()
      {
      //cout<<"CLOSE CONNECTION"<<endl;
      closesocket( mySocket );
      mySocket = myBackup;
      }

      void Socket::GetAndSendMessage()
      {
      char message[STRLEN];
      cin.ignore();//without this, it gets the return char from the last cin and ignores the following one!
      cout<<"Send > ";
      cin.get( message, STRLEN );
      SendData( message );
      }

      void ServerSocket::StartHosting( int port )
      {
      Bind( port );
      Listen();
      }

      void ServerSocket::Listen()
      {
      //cout<<"LISTEN FOR CLIENT..."<<endl;

      if ( listen ( mySocket, 1 ) == SOCKET_ERROR )
      {
      cerr<<"ServerSocket: Error listening on socket\n";
      system("pause");
      WSACleanup();
      exit(15);
      }

      //cout<<"ACCEPT CONNECTION..."<<endl;

      acceptSocket = accept( myBackup, NULL, NULL );
      while ( acceptSocket == SOCKET_ERROR )
      {
      acceptSocket = accept( myBackup, NULL, NULL );
      }
      mySocket = acceptSocket;
      }

      void ServerSocket::Bind( int port )
      {
      myAddress.sin_family = AF_INET;
      myAddress.sin_addr.s_addr = inet_addr( "0.0.0.0" );
      myAddress.sin_port = htons( port );

      //cout<<"BIND TO PORT "<<port<<endl;

      if ( bind ( mySocket, (SOCKADDR*) &myAddress, sizeof( myAddress) ) == SOCKET_ERROR )
      {
      cerr<<"ServerSocket: Failed to connect\n";
      system("pause");
      WSACleanup();
      exit(14);
      }

      }

      void ClientSocket::ConnectToServer( const char *ipAddress, int port )
      {
      myAddress.sin_family = AF_INET;
      myAddress.sin_addr.s_addr = inet_addr( ipAddress );
      myAddress.sin_port = htons( port );

      //cout<<"CONNECTED"<<endl;

      if ( connect( mySocket, (SOCKADDR*) &myAddress, sizeof( myAddress ) ) == SOCKET_ERROR )
      {
      cerr<<"ClientSocket: Failed to connect\n";
      system("pause");
      WSACleanup();
      exit(13);
      }
      }



      Das meiste hat nen Kumbel von mir gemacht. Ich hab nur ca. 30% gemacht ^^
      Vielen Dank für die Hilfe. Nehme auch gern Kritik an :)


      mfG Fischiiiii :redbullsmiley:
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

    • Fischmehl;47992 schrieb:


      Es soll Packete lesen (zb. von einem privaten Server; in diesem Fall ein Flyff Pserver) und zurücksenden.


      Und wozu soll das deiner Meinung nach gut sein?^^

      Fischmehl;47992 schrieb:


      Seid nicht so streng, bin noch nicht so gut darin! *_*


      Ach quatsch für dein ... öhm euer erstes Mal proggen siehts nich so schlimm aus wie bei mir xD

      /Edit: Aber den Code hätte ich in einen Spoiler gesetzt^^
    • wtf! have fun das in vb 6 zu versuchen c++ und vb 6 sind 2 welten!
      auserdem ich habe veruscht ein winsock zu coden das hast nciht du versucht du ahst c&p es klappt ent und du willst hilfe dabei omg!
      sorry da sag ich nur fail!
      das ist c++ und net vb6

      MFG
      D3DH3xX
      edit1: OT:
      *hust* godlikerz.de/allgemein/release-s4l-public-rev-2-a-2009.html
      kanns wenigstens ausserdem schreib ich halt shcnell dan kommen fehler rein ich hab naehmlich kein bock nem leecherchen der behauptet er hats gecodet zu helfen das hat keinen sinn? jemanden der behauptet er kanns noch net so gut das ist fuer mich selbst coden!
    • D3DH3xX;48007 schrieb:

      wtf! have fun das in vb 6 zu versuchen c++ und vb 6 sind 2 welten!
      auserdem ich habe veruscht ein winsock zu coden das hast nciht du versucht du ahst c&p es klappt ent und du willst hilfe dabei omg!
      sorry da sag ich nur fail!
      das ist c++ und net vb6

      MFG
      D3DH3xX


      Benutzertitel: Game Hacker...ahja....son imbahax00r?....wie wäre es mal mit gescheitem Deutsch zu posten und ihm zu helfn?....

      B2T:
      sieht mir aber ehrlich net nach vb6 aus...aber vom grundsatz her (habs nicht getestet) müsste es eig das tun was du willst nur den sinn dahinter versteh ich nicht?
    • So besser?

      Erstmal grob so :D



      ption Explicit
      Dim port as Integer
      Private Sub b_listen_Click()
      port = port_text.Text
      server1.LocalPort = port
      server1.Listen
      End Sub


      Private Sub server1_ConnectionRequest(ByVal requestID As Long)
      server1.Accept requestID
      status_l.Caption = "Online!"
      End Sub



      Private Sub send(nachricht as String)
      server1.SendData nachricht
      nachricht = ""
      End Sub
      Private Sub server1_DataArrival(ByVal allebytes As Long)
      Dim nachricht_got as String
      server1.GetData nachricht_got
      nachricht_l.Caption = nachricht_got
      End Sub






      Private Sub b_connect_Click()
      client1.RemoteHost = ip_text.Text
      client1.RemotePort = port_text.Text
      client1.Connect
      End Sub


      Public Sub Senden(text As String)
      On Error Resume Next
      client1.SendData text
      text = ""
      End Sub
      Private Sub client1_DataArrival(ByVal allebytes As Long)
      Dim nachricht_got as String
      client1.GetData nachricht_got
      nachricht_l.Caption = nachricht_got
      End Sub




      Mein Ziel: Flyff Packete empfangen..und eigenes Packet an Server schicken.