Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [C++] Socket

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    7

    [C++] Socket

    ho implementato un server/client TCP ma al momento in cui il client effettua la chiusura del collegamento il server non si accorge della chiusura del socket nonostante il fatto che la close() avvenga con successo.

    qualcuno può dirmi da che che cosa può dipendere?

  2. #2
    windows o linux?

    se... windows... qua:
    http://forum.html.it/forum/showthrea...ghlight=socket
    ...Terrible warlords, good warlords, and an english song

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    7
    l'ambiente di sviluppo è sotto linux

  4. #4
    approfitto per chiedere una cosa...
    ho fatto un piccolo server in C++ che accetta delle connessioni:

    codice:
    #include <iostream>
    #include <winsock.h>
    using namespace std;
    
    int main() {
    
      // Inizializzazione Winsock.
      
      WSADATA wsaData;
      int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
      if (iResult != NO_ERROR)
        printf("Errore in WSAStartup()\n");
    
      // Creaizone della socket con i relativi parametri
      int ListenSocket;
      ListenSocket = socket(AF_INET, SOCK_STREAM, 0);
      if (ListenSocket == INVALID_SOCKET) {
        printf("Errore nella chiamata socket(): %ld\n", WSAGetLastError());
        WSACleanup();
        exit(1);
      }
    
      sockaddr_in service;
      service.sin_family = AF_INET;
      service.sin_addr.s_addr = inet_addr("127.0.0.1");
      service.sin_port = htons(27015);
    
      if (bind( ListenSocket, 
        (SOCKADDR*) &service, 
        sizeof(service)) == SOCKET_ERROR) {
        printf("bind() failed.\n");
        closesocket(ListenSocket);
        exit(1);
      }
    
      if (listen( ListenSocket, 15 ) == SOCKET_ERROR)
        printf("Error listening on socket.\n");
    
      int AcceptSocket;
      printf("Waiting for client to connect...\n");
    
      while(1) {
        AcceptSocket = SOCKET_ERROR;
        while( AcceptSocket == SOCKET_ERROR ) {
          AcceptSocket = accept( ListenSocket, NULL, NULL );
        }
        printf("Client connected.\n");
        ListenSocket = AcceptSocket;
        break;
      }
      WSACleanup();
      return 0;
    }
    il compilatore non mi dà alcun problema, solo che mi dà 11 errori di linker perchè il riferimento alle funzioni bind(), socket(), accept() ...etc non è definito.

    questo tipo di errore lo dà programmando su DevC++, su MS Visual C++ e anche su .NET

    tra l'altro questo codice l'ho trovato anche sulla libreria msdn, e in gran parte coincide con quello che ho su alcuni testi.

    da cosa è causato questo strano errore di linker ???

    grazie ciao!

  5. #5
    Originariamente inviato da Storm Sentry
    approfitto per chiedere una cosa...
    ho fatto un piccolo server in C++ che accetta delle connessioni:

    codice:
    #include <iostream>
    #include <winsock.h>
    using namespace std;
    
    int main() {
    
      // Inizializzazione Winsock.
      
      WSADATA wsaData;
      int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
      if (iResult != NO_ERROR)
        printf("Errore in WSAStartup()\n");
    
      // Creaizone della socket con i relativi parametri
      int ListenSocket;
      ListenSocket = socket(AF_INET, SOCK_STREAM, 0);
      if (ListenSocket == INVALID_SOCKET) {
        printf("Errore nella chiamata socket(): %ld\n", WSAGetLastError());
        WSACleanup();
        exit(1);
      }
    
      sockaddr_in service;
      service.sin_family = AF_INET;
      service.sin_addr.s_addr = inet_addr("127.0.0.1");
      service.sin_port = htons(27015);
    
      if (bind( ListenSocket, 
        (SOCKADDR*) &service, 
        sizeof(service)) == SOCKET_ERROR) {
        printf("bind() failed.\n");
        closesocket(ListenSocket);
        exit(1);
      }
    
      if (listen( ListenSocket, 15 ) == SOCKET_ERROR)
        printf("Error listening on socket.\n");
    
      int AcceptSocket;
      printf("Waiting for client to connect...\n");
    
      while(1) {
        AcceptSocket = SOCKET_ERROR;
        while( AcceptSocket == SOCKET_ERROR ) {
          AcceptSocket = accept( ListenSocket, NULL, NULL );
        }
        printf("Client connected.\n");
        ListenSocket = AcceptSocket;
        break;
      }
      WSACleanup();
      return 0;
    }
    il compilatore non mi dà alcun problema, solo che mi dà 11 errori di linker perchè il riferimento alle funzioni bind(), socket(), accept() ...etc non è definito.

    questo tipo di errore lo dà programmando su DevC++, su MS Visual C++ e anche su .NET

    tra l'altro questo codice l'ho trovato anche sulla libreria msdn, e in gran parte coincide con quello che ho su alcuni testi.

    da cosa è causato questo strano errore di linker ???

    grazie ciao!
    devi linkare la libreria "wsock32.lib"
    (in dev c++ "libwsock32.a")... come si linka è scritto nel topic linkato sopra (scusa il gioco di parole).
    ...Terrible warlords, good warlords, and an english song

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.