Programm bleibt stehen bei Socket



  • Hallo,

    ich hab das folgenden Programm aus der MSDN. Das habe ich kompiliert und gestartet und es zeigt immer an das die Verbindung fehlgeschlagen ist. Woran liegt das?
    Muss ich die Firewalleinstellungen ändern? Virenscanner dazwischen?
    Habe das schon bei anderen kleinen Programm beobachtet , dass connect nicht klappt.

    Gruß!

    Hier der Code

    #include <stdio.h>
    #include "winsock2.h"
    
    int main() {
      //----------------------
      // Initialize Winsock
      WSADATA wsaData;
      int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
      if (iResult != NO_ERROR)
        printf("Error at WSAStartup()\n");
    
      //----------------------
      // Create a SOCKET for connecting to server
      SOCKET ConnectSocket;
      ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
      if (ConnectSocket == INVALID_SOCKET) {
        printf("Error at socket(): %ld\n", WSAGetLastError());
        WSACleanup();
        return 0;
      }
    
      //----------------------
      // The sockaddr_in structure specifies the address family,
      // IP address, and port of the server to be connected to.
      sockaddr_in clientService; 
      clientService.sin_family = AF_INET;
      clientService.sin_addr.s_addr = inet_addr( "127.0.0.1" );
      clientService.sin_port = htons( 27015 );
    
      //----------------------
      // Connect to server.
      if ( connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) {
        printf( "Failed to connect.\n" );
        WSACleanup();
        return 0;
      }
    
      printf("Connected to server.\n");
      WSACleanup();
      return 0;
    }
    


  • Ach ja:

    kompiliert mit gcc



  • Port 27015 sieht mir stark nach cstrike-Server aus? - Ich meine die benutzen UDP, d.h. du liegst mit SOCK_STREAM falsch sondern müsstest eher SOCK_DGRAM benutzen.

    Ich kenne mich da nich so aus, aber bei UDP fehlt connect() glaube ich weg und du müsstest sendto() und recvfrom() oder so benutzen...



  • Du solltest vllt. nich gleich mit einem cstrike server kommunizieren.
    Fang mit was leichterem an wie z.B http (port 80)

    mfg tobZel


Anmelden zum Antworten