• 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[i] = '\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:

  • Zitat von Fischmehl;47992


    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?^^

    Zitat von Fischmehl;47992


    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^^

    [center][FELD="Neulich im Chat mit xDrago"]
    xDrago: sorry war beschäftigt, ich musste das weiße Pulver auf nem bonbon wegblasen
    Ich: junge, das bläst man nich ab, das zieht man sich durch die Nase![/FELD][/center]

  • Und ich würde mal sagen das es nicht VB6 ist ;)
    Also wenn ihr das in VB6 ausführen wollt viel Spaß dabei...
    C++ in VB6 zu benutzen ist nicht immer empfehlenswert(eig. nie oO)

    Aber ansonsten denke ich es würde das richtige machen...



  • 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* http://www.godlikerz.de/allgemein/rele…v-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!

  • Zitat von D3DH3xX;48007

    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?

    [CENTER]
    [/CENTER]

  • 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.

  • Sieht besser aus :P
    Mein Vorschlag gilt immernoch damit es nicht so glotzig aussieht xD
    BTW: Tolle neue Signatur woher hast du die nur :yarr:

    [center][FELD="Neulich im Chat mit xDrago"]
    xDrago: sorry war beschäftigt, ich musste das weiße Pulver auf nem bonbon wegblasen
    Ich: junge, das bläst man nich ab, das zieht man sich durch die Nase![/FELD][/center]

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!