Verständnisproblem bei Struktur



  • sockaddr_in sin;
    sin.sin_port=htons(12345);
    sin.sin_addr.s_addr=INADDR_ANY;
    sin.sin_family=AF_INET;
    

    Dieser Code-Schnipsel ist von einem Winsock-Programm kopiert. Dort steht, dass das eine Struktur sein soll. Allerdings kenne ich das so, dass Strukturen mit struct eingeleitet werden. Wie kann das eine Struktur sein?
    😕

    Hier das Programm:

    #include <windows.h> //Required for socket init
    #include <iostream>
    using namespace std;
    
    //server
    int main()
    {
    
    char buf2[]="test";
    long rc;
    SOCKET kSock;
    SOCKET client;
    int len;
    
    char buf[256]="";
    
    WSAData wsdata;
    WORD wsver=MAKEWORD(2, 0); //We want Winsock 2.0
    int nret=WSAStartup(wsver, &wsdata); //Pass version 2.0 and pointer to implement
    
            if(nret != 0)
            {
            cout<<"Startup failed, error code: "<<WSAGetLastError();
            WSACleanup();
            return -1;
            }
    
    cout<<"Init success\n";
    kSock=socket(AF_INET, SOCK_STREAM, 0);
    
            if(kSock == INVALID_SOCKET)
            {
            cout<<"Socket init failed";
            return -1;
            }
    
    cout<<"Socket initialized\n";
    sockaddr_in sin;
    sin.sin_port=htons(12345);
    sin.sin_addr.s_addr=INADDR_ANY;
    sin.sin_family=AF_INET;
    
            if(bind(kSock,(sockaddr*)&sin, sizeof(sin)) == SOCKET_ERROR)
            {
            cout<<"Failed to bind\n";
            WSACleanup();
            return -1;
            }
    
    cout<<"Bind successful!\n";
    
      rc=listen(kSock,10);
    
      if(rc==SOCKET_ERROR)
      {
            cout<<"Error "<<GetLastError();
        system("PAUSE");
        return 0;
      }
    
      else
      {
        cout<<"acceptSocket ist im listen Modus....\n";
      }
    
        // Verbindung annehmen
         client=accept(kSock,NULL,NULL);
    
        if(client==INVALID_SOCKET)
            {
            cout<<"Fehler: accept, fehler code: <<"<<WSAGetLastError();
        return 1;
        }
    
         cout<<"Neue Verbindung wurde akzeptiert!\n";
    
       // Daten austauschen
      while(rc!=SOCKET_ERROR)
      {
    
                           send(client,buf2,strlen(buf2),0);
                           rc=recv(client,buf,256,0);
    
                    if(rc==0)
                    {
                        cout<<"Server hat die Verbindung getrennt..\n";
                        system("PAUSE");
                        return 0;
                     }
    
                if(rc==SOCKET_ERROR)
                    {
                  cout<<"Fehler: recv, fehler code: "<<WSAGetLastError();
                  break;
                       }
    
            cout<<"Client sendet: "<<system(buf);
                    cout<<"\n";
    
      }
    
    closesocket(client); //Close both socket handles
    closesocket(kSock);
    WSACleanup();
    return 0;
    }
    


  • skullyan schrieb:

    Allerdings kenne ich das so, dass Strukturen mit struct eingeleitet werden. Wie kann das eine Struktur sein?
    😕

    Also ich sehe das auch so, dass Struturen mit struct anfangen. Aber wenn du die allgemeine Definition von Strukturen kennst, also:

    Strukturen sind eine Zusammenfassung mehrerer Datentypen oder Definitionen.

    Dann kannst du das auch sicher irwie herleiten.

    best rgds
    Agahan



  • skullyan schrieb:

    Allerdings kenne ich das so, dass Strukturen mit struct eingeleitet werden. Wie kann das eine Struktur sein?

    Das Programm ist in C++, nicht C. In C++ kann man das struct beim Deklarieren einer Struktur weglassen.



  • Und selbst in C könnte man mit

    typedef struct
    {
        ...
    } moep;
    

    Das ganze auch über moep ansprechbar machen.


Anmelden zum Antworten