精华内容
下载资源
问答
  • socket vc编程

    2010-04-20 10:10:01
    vc socket编程例子,server 端,client端
  • tcp socket vc2008编写

    2008-11-08 16:59:39
    这是一个 vs2008 编写的 服务端与客户端 测试成功
  • TCP(socket vc) client

    2008-06-20 06:45:00
    } SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);  SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); connect...

    #include <Winsock2.h> #include <stdio.h>

    void main() {  WORD wVersionRequested;  WSADATA wsaData;  int err;    wVersionRequested = MAKEWORD( 1, 1 );    err = WSAStartup( wVersionRequested, &wsaData );  if ( err != 0 ) {   return;  }  

     if ( LOBYTE( wsaData.wVersion ) != 1 ||         HIBYTE( wsaData.wVersion ) != 1 ) {   WSACleanup( );   return;  }  SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);

     SOCKADDR_IN addrSrv;  addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");  addrSrv.sin_family=AF_INET;  addrSrv.sin_port=htons(6000);  connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

     char recvBuf[100];  recv(sockClient,recvBuf,100,0);  printf("%s/n",recvBuf);  send(sockClient,"This is lisi",strlen("This is lisi")+1,0);

     closesocket(sockClient);  WSACleanup(); }

    展开全文
  • vc socket 编程

    2016-12-02 19:58:49
    关于VCsocket编程(包括源程序)
  • VC SOCKET

    2019-10-01 03:00:21
     * SOCKET object for the class. *   * *   * RETURNS: ERR_WSAERROR upon error, *   * otherwise ERR_SUCCESS *   * *  ************************************** */   if  ( ...
    -

    .H

     

    /*******************************************
     * winSocket.h - Header file for winSocket * 
     *      Winsock API wrapper class          *
     *    Ryan Lederman ryan@winprog.org       *
     *            January 2002                 *
     *          THIS CODE IS FREE              *
     *                                         *
     ******************************************
    */

    #ifndef _WINSOCKET_H
    #define _WINSOCKET_H

    #include 
    "winsock.h"
    #include 
    "winbase.h"

    #define ERR_SUCCESS  0x00000000    // Successful
    #define ERR_BADPARAM 0x80000001    // Bad argument passed
    #define ERR_WSAERROR 0x80000002    // Need to get_LastError()
    #define ERR_MAXLENGTH 512

    class winSocket    // Definition of winSocket
    {
    public:    // Public Methods
        winSocket::winSocket();        // Constructor
        winSocket::~winSocket();    // Destructor

        
    int Create( void );                                                // Creates the socket
        int Close( void );                                                // Closes the socket
        int Connect( char* strRemote, unsigned int iPort );                // Connects the socket to a remote site
        int Send( SOCKET s, char* strData, int iLen );                    // Sends data
        int Send( char* strData, int iLen );    
        
    int Receive( SOCKET s, char* strData, int iLen );                // Receives data
        int Receive( char* strData, int iLen );
        
    int Listen( int iQueuedConnections );                            // Listen for connections
        int Bind( char* strIP, unsigned int iPort );                    // Binds to a port
        int Accept( SOCKET s );                                            // Accepts a connection
        int asyncSelect( HWND hWnd,                                        // Allows calling window to receive 
            unsigned int wMsg, long lEvent );                            // notifications (non-blocking sockets)                                        
        int get_LocalIP( char* strIP );                                    // Returns local IP address            
        int get_LocalPort( int* iPort );                                // Returns local Port number
        int get_RemoteIP( char* strIP );                                // Returns remote side IP
        int get_RemotePort( int* iPort );                                // Returns remote side Port number
        int get_LocalHost( char* strBuffer, int iBufLen );                // Returns local host name
        int get_RemoteHost( char* strBuffer, int iBufLen );                // Returns remote host name
        void get_LastError( char* strBuffer, int* iErrNum );            // Returns error information
        int set_SendTimeout( int ms );                                    // Sets send timeout, in milliseconds
        int set_RecvTimeout( int ms );                                    // Sets recv timeout, in milliseconds
        void longToDottedQuad( unsigned long ulLong, char* cBuffer );    // 32-bit long -> dotted quad
    private:    // Private Methods
        void winSocket::set_LastError( char* newError, int errNum );    // Sets last error information
    private:    // Private Members
        struct sockaddr_in m_sockaddr;        // Holds all data associated with socket
        struct sockaddr_in m_rsockaddr;        // Holds data associated with remote side
        WORD m_wVersion;                    // Version to use when calling WSAStartup
        char m_LastError[ERR_MAXLENGTH+1];    // Buffer that holds last error
        int     m_ErrorNumber;                    // Last error number
    public:        // Public Members
        SOCKET m_hSocket;                    // Underlying SOCKET object
    };

    #endif /* _WINSOCKET_H */

     

     

     

    .CPP

     

    /*******************************************
     *   winSocket.cpp - Implementation of     * 
     *   winSocket Winsock API wrapper class   *
     *    Ryan Lederman ryan@winprog.org       *
     *            January 2002                 *
     *          THIS CODE IS FREE              *
     *                                         *
     ******************************************
    */

    #include 
    "winSocket.h"

    winSocket::winSocket() : m_hSocket(
    0),
                             m_wVersion(
    0),
                             m_ErrorNumber(
    0)        
    {
        WSADATA wsaD;    
    // Structure initialsed by WSAStartup
        m_wVersion = MAKEWORD(2,2);    // Version number requested

        memset( m_LastError, 
    0, ERR_MAXLENGTH );    // Nullify last error
        memset( &m_sockaddr, 0sizeof( m_sockaddr ) );    // Nullify structures
        memset( &m_rsockaddr, 0sizeof( m_rsockaddr ) );

        
    int result = WSAStartup( m_wVersion, &wsaD );    // Initialize Winsock
        
        
    if( result != 0 ) // WSAStartup failed
        {
            set_LastError( 
    "WSAStartup failed!", WSAGetLastError() );
            
    return;
        }
    }

    winSocket::
    ~winSocket() { WSACleanup();    /* Un-initialise Winsock*/ }

    int winSocket::Create( void )
    {
        
    /**************************************
        * FUNCTION: Create                    *
        *                                     *
        * PURPOSE: Initializes the underlying *
        * SOCKET object for the class.        *           
        *                                     * 
        * RETURNS: ERR_WSAERROR upon error,   *                 
        * otherwise ERR_SUCCESS               *   
        *                                     *
        **************************************
    */

        
    if ( (m_hSocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP )) == INVALID_SOCKET )
        {
            set_LastError( 
    "socket() failed", WSAGetLastError() );
            
    return ERR_WSAERROR;
        }

        
    return ERR_SUCCESS;    
    }

    int winSocket::Close( void )
    {
        
    /****************************************
        * FUNCTION: Close                       *
        *                                       *
        * PURPOSE: Closes the underlying        *
        * SOCKET object. Does not destroy class *           
        *                                       * 
        * RETURNS: ERR_WSAERROR upon error,     *                  
        * otherwise ERR_SUCCESS                 *   
        *                                       *
        ****************************************
    */

        
    if ( closesocket( m_hSocket ) == SOCKET_ERROR )
        {
            set_LastError( 
    "closesocket() failed", WSAGetLastError() );
            
    return ERR_WSAERROR;
        }

        memset( 
    &m_sockaddr, 0sizeof( sockaddr_in ) );
        memset( 
    &m_rsockaddr, 0sizeof( sockaddr_in ) );

        
    return ERR_SUCCESS;
    }

    int winSocket::Connect( char* strRemote, unsigned int iPort )
    {
        
    /*****************************************
        * FUNCTION: Connect                      *
        *                                        *
        * PURPOSE: Establishes TCP/IP connection *
        * with remote host (strRemote) on port   *     
        * # (iPort)                              *
        *                                        *
        * RETURNS: ERR_BADPARAM for invalid      *
        * parameters, ERR_WSAERROR upon error,   *
        * otherwise ERR_SUCCESS                  *
        *                                        *
        *****************************************
    */

        
    if( strlen( strRemote ) == 0 || iPort == 0 )
            
    return ERR_BADPARAM;

        hostent 
    *hostEnt = NULL;
        
    long lIPAddress = 0;

        hostEnt 
    = gethostbyname( strRemote );

        
    if( hostEnt != NULL )
        {
            lIPAddress 
    = ((in_addr*)hostEnt->h_addr)->s_addr;
            m_sockaddr.sin_addr.s_addr 
    = lIPAddress;
        }
        
    else
        {
            m_sockaddr.sin_addr.s_addr 
    = inet_addr( strRemote );
        }

        m_sockaddr.sin_family 
    = AF_INET;
        m_sockaddr.sin_port 
    = htons( iPort );

        
    if( connect( m_hSocket, (SOCKADDR*)&m_sockaddr, sizeof( m_sockaddr ) ) == SOCKET_ERROR )
        {
            set_LastError( 
    "connect() failed", WSAGetLastError() );
            
    return ERR_WSAERROR;
        }

        
    return ERR_SUCCESS;
    }

    int winSocket::Listen( int iQueuedConnections )
    {
        
    /*****************************************
        * FUNCTION: Listen                       *
        *                                        *
        * PURPOSE: Places the SOCKET in the      *
        * listening state. Requires that Bind()  *
        * be called previously.                  *
        *                                        *
        * RETURNS: ERR_BADPARAM for invalid      *
        * parameters, ERR_WSAERROR upon error,   *
        * otherwise ERR_SUCCESS                  *
        *                                        *
        *****************************************
    */

        
    if( iQueuedConnections == 0 )
            
    return ERR_BADPARAM;

        
    if( listen( m_hSocket, iQueuedConnections ) == SOCKET_ERROR )
        {
            set_LastError( 
    "listen() failed", WSAGetLastError() );
            
    return ERR_WSAERROR;
        }

        
    return ERR_SUCCESS;
    }

    int winSocket::Send( SOCKET s, char* strData, int iLen )
    {
        
    /**********************************************
        * FUNCTION: Send                              *
        *                                             *
        * PURPOSE: Sends data (strData) to remote     *
        * side on socket s.                           *
        *                                             *
        * RETURNS: ERR_BADPARAM for invalid           *
        * parameters, ERR_WSAERROR upon error,        *
        * otherwise ERR_SUCCESS                       *
        *                                             *
        **********************************************
    */

        
    if( strData == NULL || iLen == 0 )
            
    return ERR_BADPARAM;

        
    if( send( s, strData, iLen, 0 ) == SOCKET_ERROR )
        {
            set_LastError( 
    "send() failed", WSAGetLastError() );
            
    return ERR_WSAERROR;
        }
        
        
    return ERR_SUCCESS;
    }

    int winSocket::Send( char* strData, int iLen )
    {
        
    /**********************************************
        * FUNCTION: Send                              *
        *                                             *
        * PURPOSE: Sends data (strData) to remote     *
        * side on an established TCP/IP connection.   *
        * Requires that Connect be called previously. *
        *                                             *
        * RETURNS: ERR_BADPARAM for invalid           *
        * parameters, ERR_WSAERROR upon error,        *
        * otherwise ERR_SUCCESS                       *
        *                                             *
        **********************************************
    */

        
    if( strData == NULL || iLen == 0 )
            
    return ERR_BADPARAM;

        
    if( send( m_hSocket, strData, iLen, 0 ) == SOCKET_ERROR )
        {
            set_LastError( 
    "send() failed", WSAGetLastError() );
            
    return ERR_WSAERROR;
        }
        
        
    return ERR_SUCCESS;
    }

    int winSocket::Receive( SOCKET s, char* strData, int iLen )
    {
        
    /***********************************************
        * FUNCTION: Receive                            *
        *                                              *
        * PURPOSE: Retreives data from incoming queue  *
        * and copies to (strData). (iLen) will contain *
        * the length of data read in bytes             *
        *                                              *
        * RETURNS: ERR_BADPARAM for invalid            *
        * parameters, ERR_WSAERROR upon error,         *
        * otherwise passes what recv() returns.        *
        *                                              *
        **********************************************
    */

        
    if( strData == NULL )
            
    return ERR_BADPARAM;

        
    int len = 0;
        
    int ret = 0;
        
        ret 
    = recv( s, strData, iLen, 0 );

        
    if ( ret == SOCKET_ERROR )
        {
            set_LastError( 
    "recv() failed", WSAGetLastError() );
            
    return ERR_WSAERROR;
        }
        
    return ret;
    }

    int winSocket::Receive( char* strData, int iLen )
    {
        
    /***********************************************
        * FUNCTION: Receive                            *
        *                                              *
        * PURPOSE: Retreives data from incoming queue  *
        * and copies to (strData). (iLen) will contain *
        * the length of data read in bytes             *
        *                                              *
        * RETURNS: ERR_BADPARAM for invalid            *
        * parameters, ERR_WSAERROR upon error,         *
        * otherwise passes what recv() returns.        *
        *                                              *
        **********************************************
    */

        
    if( strData == NULL )
            
    return ERR_BADPARAM;

        
    int len = 0;
        
    int ret = 0;
        
        ret 
    = recv( m_hSocket, strData, iLen, 0 );

        
    if ( ret == SOCKET_ERROR )
        {
            set_LastError( 
    "recv() failed", WSAGetLastError() );
            
    return ERR_WSAERROR;
        }

        
    return ret;
    }

    int winSocket::Bind( char* strIP, unsigned int iPort )
    {
        
    /************************************************
        * FUNCTION: Bind                                *
        *                                               *
        * PURPOSE: Associates the SOCKET object with an *
        * IP address (strIP) and port number (iPort)    *
        *                                               *
        * RETURNS: ERR_BADPARAM for invalid             *
        * parameters, ERR_WSAERROR upon error,          *
        * otherwise ERR_SUCCESS                         *
        *                                               *
        ***********************************************
    */

        
    if( strlen( strIP ) == 0 || iPort == 0 )
            
    return ERR_BADPARAM;

        memset( 
    &m_sockaddr,0sizeof( m_sockaddr ) );
        m_sockaddr.sin_family 
    = AF_INET;
        m_sockaddr.sin_addr.s_addr 
    = inet_addr( strIP );
        m_sockaddr.sin_port 
    = htons( iPort );

        
    if ( bind( m_hSocket, (SOCKADDR*)&m_sockaddr, sizeof( m_sockaddr ) ) == SOCKET_ERROR )
        {
            set_LastError( 
    "bind() failed", WSAGetLastError() );
            
    return ERR_WSAERROR;
        }
        
    return ERR_SUCCESS;
    }

    int winSocket::Accept( SOCKET s )
    {    
        
    /***************************************************
        * FUNCTION: Accept                                 *
        *                                                  *
        * PURPOSE: Initializes the SOCKET object (if not   *
        * previously initialized), associates the SOCKET   *
        * object with the IP address and port of the       *
        * remote side, and accepts an incoming connection. *
        * Usually called from a Window Procedure using     *
        * wParam as the argument.                          *
        *                                                  *
        * RETURNS: ERR_WSAERROR upon error,                *
        * otherwise ERR_SUCCESS                            *
        *                                                  *
        ***************************************************
    */

        
    int Len = sizeof( m_rsockaddr );

        memset( 
    &m_rsockaddr, 0sizeof( m_rsockaddr ) );

        
    if( ( m_hSocket = accept( s, (SOCKADDR*)&m_rsockaddr, &Len ) ) == INVALID_SOCKET )
        {
            set_LastError( 
    "accept() failed", WSAGetLastError() );
            
    return ERR_WSAERROR;
        }

        
    return ERR_SUCCESS;
    }

    int winSocket::asyncSelect( HWND hWnd, unsigned int wMsg, long lEvent )
    {
        
    /**************************************************
        * FUNCTION: asyncSelect                           *
        *                                                 *
        * PURPOSE: Enables Windows Messaging notification *
        * for the object. (wMsg) will be sent to the      *
        * Window Procedure of (hWnd) whenever one of the  *
        * events in (lEvent) has occurred. See MSDN docs  *
        * for WSAAsyncSelect() for more information.      *
        *                                                 *
        * RETURNS: ERR_BADPARAM for invalid               *
        * parameters, ERR_WSAERROR upon error,            *
        * otherwise ERR_SUCCESS                           *
        *                                                 *
        **************************************************
    */

        
    if!IsWindow( hWnd ) || wMsg == 0 || lEvent == 0 )
            
    return ERR_BADPARAM;

        
    if( WSAAsyncSelect( m_hSocket, hWnd, wMsg, lEvent ) == SOCKET_ERROR )
        {
            set_LastError( 
    "WSAAsyncSelect() failed", WSAGetLastError() );
            
    return ERR_WSAERROR;
        }
        
    return ERR_SUCCESS;
    }

    int winSocket::get_RemoteIP( char* strIP )
    {
        
    /*************************************************
        * FUNCTION: get_RemoteIP                         *
        *                                                *
        * PURPOSE: Copies the IP address for the remote  *
        * side on an established TCP/IP connection into  *
        * (strIP).                                       *
        *                                                *
        * RETURNS: ERR_BADPARAM for invalid parameters,  *
        * ERR_WSAERROR upon error, otherwise ERR_SUCCESS *
        *                                                *
        *************************************************
    */

        
    if( strIP == NULL )
            
    return ERR_BADPARAM;

        
    int namelen = sizeof( m_rsockaddr );

        
    if( getpeername( m_hSocket, (SOCKADDR*)&m_rsockaddr, &namelen ) == SOCKET_ERROR )
        {
            set_LastError( 
    "getpeername() failed", WSAGetLastError() );
            
    return ERR_WSAERROR;
        }

        longToDottedQuad( m_rsockaddr.sin_addr.s_addr, strIP );

        
    return ERR_SUCCESS;
    }

    int winSocket::get_RemotePort( int* iPort )
    {
        
    /*************************************************
        * FUNCTION: get_RemotePort                       *
        *                                                *
        * PURPOSE: Copies the port number for the remote *
        * side on an established TCP/IP connection into  *
        * (iPort).                                       *
        *                                                *
        * RETURNS: ERR_BADPARAM for invalid parameters,  *
        * ERR_WSAERROR upon error, otherwise ERR_SUCCESS *
        *                                                *
        *************************************************
    */

        
    if( iPort == NULL )
            
    return ERR_BADPARAM;

        
    int namelen = sizeof( m_rsockaddr );
        
        
    if( getpeername( m_hSocket, (SOCKADDR*)&m_rsockaddr, &namelen ) == SOCKET_ERROR )
        {
            set_LastError( 
    "getpeername() failed", WSAGetLastError() );
            
    return ERR_WSAERROR;
        }

        
    *iPort = ntohs( m_rsockaddr.sin_port );

        
    return ERR_SUCCESS;
    }

    int winSocket::get_LocalHost( char* strBuffer, int iBufLen )
    {
        
    /*************************************************
        * FUNCTION: get_LocalHost                        *
        *                                                *
        * PURPOSE: Copies the fully qualified host name  *
        * for the local machine into (strBuffer). Will   *
        * fail if returned data is longer than (iBufLen).*
        *                                                *
        * RETURNS: ERR_BADPARAM for invalid parameters,  *
        * ERR_WSAERROR upon error, otherwise ERR_SUCCESS *
        *                                                *
        *************************************************
    */

        
    if( strBuffer == NULL )
            
    return ERR_BADPARAM;

        
    char strHost[512= {0};
        hostent
    * hostEnt = NULL;
        
    int iLen = 0;

        gethostname( strHost, 
    512 );
        hostEnt 
    = gethostbyname( strHost );

        
    if( hostEnt == NULL )
            
    return ERR_WSAERROR;

        iLen 
    = strlen( hostEnt->h_name );

        
    if( iLen > iBufLen )
            
    return ERR_BADPARAM;

        memset( strBuffer, 
    0, iBufLen );
        memcpy( strBuffer, hostEnt
    ->h_name, iLen );

        
    return ERR_SUCCESS;
    }

    int winSocket::get_RemoteHost( char* strBuffer, int iBufLen )
    {
        
    /*************************************************
        * FUNCTION: get_RemoteHost                       *
        *                                                *
        * PURPOSE: Copies the fully qualified host name  *
        * of the remote side (on a connected socket)     *
        * into (strBuffer). Will fail if data returned   *
        * is longer than iBufLen.                        *
        *                                                *
        * RETURNS: ERR_BADPARAM for invalid parameters,  *
        * ERR_WSAERROR upon error, otherwise ERR_SUCCESS *
        *                                                *
        *************************************************
    */

        
    if( strBuffer == NULL )
            
    return ERR_BADPARAM;

        hostent
    * hostEnt = NULL;
        
    int iLen = 0;
        
    int namelen = sizeof( m_rsockaddr );

        
    if( getpeername( m_hSocket, (SOCKADDR*)&m_rsockaddr, &namelen ) == SOCKET_ERROR )
            
    return ERR_WSAERROR;

        hostEnt 
    = gethostbyaddr( (char*)&m_rsockaddr.sin_addr.s_addr, 4 ,PF_INET );

        
    if( hostEnt != NULL )
        {
            iLen 
    = strlen( hostEnt->h_name );
            
    if( iLen > iBufLen )
                
    return ERR_BADPARAM;

            memcpy( strBuffer, hostEnt
    ->h_name, iLen );
            
    return ERR_SUCCESS;
        }

        
    return ERR_WSAERROR;
    }

    int winSocket::get_LocalIP( char* strIP )
    {
        
    /*************************************************
        * FUNCTION: get_LocalIP                          *
        *                                                *
        * PURPOSE: Copies the IP address for the local   *
        * machine into (strIP). Requires that Connect or *
        * Bind be called previously                      *
        *                                                *
        * RETURNS: ERR_BADPARAM for invalid parameters,  *
        * otherwise ERR_SUCCESS                          *
        *                                                *
        *************************************************
    */

        
    if( strIP == NULL )
            
    return ERR_BADPARAM;
        
        
    int  namelen = sizeof( m_sockaddr );
        HOSTENT
    * hEnt = NULL;
        
    char szHostName[512= {0};
        
    char szIP[16= {0};
        
    char szAddrField[4= {0};
        unsigned 
    int ufield = 0;

        
    if( getsockname( m_hSocket, (SOCKADDR*)&m_sockaddr, &namelen ) == SOCKET_ERROR )
            
    return ERR_WSAERROR;

        longToDottedQuad( m_sockaddr.sin_addr.s_addr, strIP );

        
    return ERR_SUCCESS;
    }

    int winSocket::get_LocalPort( int* iPort )
    {
        
    /*****************************************************
        * FUNCTION: get_LocalPort                            *
        *                                                    *
        * PURPOSE: Copies the local port number associated   *
        * with the SOCKET object into (iPort).               *
        * Requires that Connect or Bind be called previously *
        *                                                    *
        * RETURNS: ERR_BADPARAM for invalid parameters,      *
        * otherwise ERR_SUCCESS                              *
        *                                                    *
        *****************************************************
    */

        
    if( iPort == NULL )
            
    return ERR_BADPARAM;

        
    *iPort = ntohs(m_sockaddr.sin_port);

        
    return ERR_SUCCESS;
    }

    int winSocket::set_SendTimeout( int ms )
    {
        
    /*****************************************************
        * FUNCTION: set_SendTimeout                          *
        *                                                    *
        * PURPOSE: Sets the amount of time the socket will   *
        * wait before returning WSAETIMEDOUT when calling    *
        * Send(). Set to 0 for infinite (default)            *
        *                                                    *
        * RETURNS: ERR_BADPARAM for invalid parameters,      *
        * ERR_WSAERROR for a winsock error,                  *
        * otherwise ERR_SUCCESS                              *
        *                                                    *
        *****************************************************
    */
        
        
    if( ms < 0 )
            
    return ERR_BADPARAM;

        
    if( setsockopt( m_hSocket, SOL_SOCKET, SO_SNDTIMEO, (char*)&ms, sizeof( ms ) ) == SOCKET_ERROR )
        {
            set_LastError( 
    "setsockopt() failed.", WSAGetLastError() );
            
    return ERR_WSAERROR;
        }

        
    return ERR_SUCCESS;
    }

    int winSocket::set_RecvTimeout( int ms )
    {
        
    /*****************************************************
        * FUNCTION: set_RecvTimeout                          *
        *                                                    *
        * PURPOSE: Sets the amount of time the socket will   *
        * wait before returning WSAETIMEDOUT when calling    *
        * Receive(). Set to 0 for infinite (default)         *
        *                                                    *
        * RETURNS: ERR_BADPARAM for invalid parameters,      *
        * ERR_WSAERROR for a winsock error,                  *
        * otherwise ERR_SUCCESS                              *
        *                                                    *
        *****************************************************
    */
        
        
    if( ms < 0 )
            
    return ERR_BADPARAM;

        
    if( setsockopt( m_hSocket, SOL_SOCKET, SO_RCVTIMEO, (char*)&ms, sizeof( ms ) ) == SOCKET_ERROR )
        {
            set_LastError( 
    "setsockopt() failed.", WSAGetLastError() );
            
    return ERR_WSAERROR;
        }

        
    return ERR_SUCCESS;
    }

    void winSocket::set_LastError( char* newError, int errNum )
    {
        
    /**************************************************
        * FUNCTION: set_LastError                         *
        *                                                 *
        * PURPOSE: Sets error information for the object. *
        *                                                 *
        * RETURNS: None.                                  *
        *                                                 *
        **************************************************
    */

        memset( m_LastError, 
    0, ERR_MAXLENGTH ); 
        memcpy( m_LastError, newError, strlen( newError ) );
        m_LastError[strlen(newError)
    +1= '\0';
        m_ErrorNumber 
    = errNum;
    }

    void winSocket::get_LastError( char* strBuffer, int* iErrNum )
    {
        
    /***************************************************
        * FUNCTION: get_LastError                          *
        *                                                  *
        * PURPOSE: Retreives description and number of the *
        * last error that occurred. Copies into (strBuffer)*
        * and (iErrNum), repsectively.                     *
        *                                                  *
        * RETURNS: None.                                   *
        *                                                  *
        ***************************************************
    */

        
    int len = strlen( m_LastError );

        
    if( len > 0 )
        {
            memset( strBuffer, 
    0, len );
            memcpy( strBuffer, m_LastError, len );
            strBuffer[len
    +1= '\0';
            
    *iErrNum = m_ErrorNumber;
        }
    }

    void winSocket::longToDottedQuad( unsigned long ulLong, char* cBuffer )
    {
        
    /*****************************************************
        * FUNCTION: longToDottedQuad                         *
        *                                                    *
        * PURPOSE: Translates an IP address from 32-bit long *
        * to dotted quad form (255.255.255.255). Translates  *
        * (ulLong) and copies results to (cBuffer).          *
        *                                                    *
        * RETURNS: None.                                     *
        *                                                    *
        *****************************************************
    */

        wsprintf( cBuffer, 
    "%d.%d.%d.%d",(int)((BYTE*)&ulLong)[0],
            (
    int)((BYTE*)&ulLong)[1],(int)((BYTE*)&ulLong)[2],(int)((BYTE*)&ulLong)[3] );
    }

    转载于:https://www.cnblogs.com/xianqingzh/archive/2009/05/15/1457741.html

    展开全文
  • VCSOCKET操作

    2013-06-14 13:49:14
    VCSOCKET连接类,用于创建连接,发送、接收数据。
  • VC Socket 通信

    2015-05-09 11:14:35
    TCP Socket Server.socket通信服务器端程序。绑定套接字和端口。等待客户端的连接
  • VC Socket代码

    2013-01-27 10:58:18
    简易的Socket开发技术,可以实现基本的文本传输,用于新手学习socket编程
  • vc Socket

    千次阅读 2008-11-25 19:33:00
    一.Socket:1.Socket的中文是“套接字”。2.TCP/IP协议使用的套接字分为3类:流式套接字、 数据报套接字、 原始套接字。(1)流式套接字:SOCK——STREAM 向应用提供面向连接的、可靠的通信流,数据发送无差错、无...
     一.Socket:
    1.Socket的中文是“套接字”。
    2.TCP/IP协议使用的套接字分为3类:流式套接字、 数据报套接字、 原始套接字。
    (1)流式套接字:SOCK——STREAM
          向应用提供面向连接的、可靠的通信流,数据发送无差错、无重复且保证接收到数据的顺序性。
          流式套接字最典型的的应用是BBS和HTTP服务。以BBS应用为例,用户通过TELNET协议和服务器建立连接,在浏览论坛帖子的交互过程中,数据总是顺序地在源端和目的端之间传输的。
          流式套接字的通信能力是有TCP协议保证,
    (2)数据报套接字:SOCK--DGRAM
          向应用提供的是无连接的服务。数据以报文的形式发送,且不能保证数据的无差错和顺序到达。使用数据报套接字的例子包括DNS(Domain Name Service域名服务)和NFS(网络文件系统)等。
          数据报套接字的一个显著优点是在于它的开销较小,适合于网络广播和组播等需要一对多发送数据的场合和频繁交互的应用(如DNS)。数据包套接字依赖UDP协议提供服务,这是他具有上诉属性的原因。
    进程要正常工作,而数据报套接字不能保证传输的正确性,因此应用程序内必须建有差错消除机制,广泛采用的策略是发送端确定一个等待时间,如果在等待时间内没有接受接收端的确定报文,就接着发送欲发送的报文,直到接受接收端的确认为止。
    (3).原始套接字--SOCK--RAW
           应用程序中一般极少使用原始套接字。它功能强大,但操作比较复杂。它可以访问底层的协议(如IP,ICMP),一般用于协议的开发。常用的DOS程序ping可以用原始套接字实现。
    二.客户机/服务器模式
       TCP/IP应用的主要工作模式是客户机/服务器(Client/Server,简称C/S模式)在两个不同进程的通信过程中,一方发出服务请求,一方提供服务,通常称他们为“客户进程”和“服务进程”。显然,两个进程之间的通信实际上是基于通信协议的进程的同步过程,服务过程作为资源的提供者,为众多主机上的客户进程提供服务,服务进程要先于客户进程开启,在某一确定的网络地址(IP地址+端口号)等待客户进程的请求,如有请求到达,服务进程采取某种方式(并发服务或者重复服务)为客户进程提供服务,直到客户进程关闭,然后服务进程继续等待下一个请求服务的进程。
       服务器通常采用并发服务的方式。所谓并发服务,就是服务进程在有客户请求到来时,激活新的进程来专门为此客户请求提供服务,并在客户终止请求后杀死该进程,与此同时,原先的进程可以继续在原来的端口等待下一个客户的连接。Socket编程接口为新的请求创建专门的服“数据套接字”,并发服务器根据该套接字创建专门的服务进程。并发服务的最大优点是及时响应请求,虽然创建新进程会增加系统开销。与此相对应的是重复服务,它利用“数据套接字”,在监听的进程上直接进行服务。

    三.流式套接字的工作流程:
           服务器
             |
         创建流式套接字
             |
         将S和本地地址和端口绑定                                 客户机
             |                                                     |
         监听,等待连接请求                                   创建流式套接字
        --------|                                                  |
        |接受客户连接,创建客户套接字ns 《---建立连接---》利用CS和远程服务器建立连接
        |     |                                                    |
        |利用ns和客户进程通信,提供服务  《--请求/应答--》利用CS和服务器进程通信,
        |(是否激活新进程依靠服务器类型而定)                  完成数据传输
        |     |                                                    |
        |关闭NS,如果是并发服务,还需要退出该进程          关闭套接字CS,结束TCP会话
        |--- >|
         关闭套接字,停止服务
    四.数据报套接字服务的工作流程:
       服务器                                               客户机
       |                                                      |
    创建数据报套接字S                              创建流式套接字CS
        |                                                      |
    将S与本地地址和端口绑定                    利用CS和远程服务器进行连接
        |                                                      |
    相应客户请求,完成数据传输                 利用CS和服务器进程通信,完成数据传输
        |                                                      |
    关闭套接字S,停止服务                      关闭套接字CS,结束UDP会话
    五.堵塞和非堵塞:
    Socket调用有两种基本模式:堵塞模式和非堵塞模式。
    堵塞模式:进程调用某一Socket函数后由于某种原因不能马上完成,这是调用进程就一直等待,直到函数返回为止。
    非堵塞模式在调用Socket函数后马上返回,等待调用完成时系统自动会以消息的方式通知调用进程,绝大部分Bekeley Socket调用都是堵塞调用,由于UNIX是抢先式多任务操作系统,在进程阻塞时,系统会将CPU的使用权交给等到的其它进程。这样不会堵塞其它进程的执行。而WINDOWS操作系统是非抢占式的,进程不会主动放弃对CPU的控制权,因此一个等待阻塞调用返回的进程会阻塞整个系统。Windows Socket规范根据WINDOWS平台的具体特点,在BSD Socket基础上扩充了非阻塞的Socket调用模式,使Socket编程更加符合Windows系统消息驱动的特性
    展开全文
  • vc socket编程

    2013-12-08 10:06:02
    调试使用的 socket代码,有服务器和终端,有源代码
  • VC Socket编程

    2009-04-10 17:58:01
    VC 下完成的Socket编程例子。自己写的 winsocket 实例,可以供供大家参考。
  • vc udp socket client

    2013-01-28 11:07:52
    vc udp socket client code
  • VC Socket

    千次阅读 2008-03-02 16:54:00
    基于TCP协议的服务器端程序流程:1)创建套接字(socket)2)绑定套接字(bind)3)将套接字设为监听,准备接收客户请求(listen)4)等待客户请求的到来,当请求到来后,接受请求,返回一个对应于此次连接的套接字(accept)5)...

     

    一、原理

    1.基于TCP协议的服务器端程序流程:
    1)创建套接字(socket)
    2)绑定套接字(bind)
    3)将套接字设为监听,准备接收客户请求(listen)
    4)等待客户请求的到来,当请求到来后,接受请求,返回一个对应于此次连接的套接字(accept)
    5)用返回的套接字与客户端进行通信(send/recv)
    6)返回,等待另一客户请求
    7)关闭套接字
    2.基于TCP协议的客户端程序流程
    1)创建套接字(socket)
    2)向服务器发出连接请求(connect)
    3)和服务器端进行通信(send/recv)
    4)关闭套接字
    在服务器端调用accept函数时,程序就会等待客户端调用connect函数发出连接请求,然后接收请求,于是
    双方就建立了连接,之后,服务器端和客户端就可以利用send和recv函数进行通信了。
    3.基于UDP的服务器端编写
    1)创建套接字(socket)
    2)绑定(bind)
    3)等待接收数据(recvfrom)
    4)关闭套接字
    4.基于UDP的客户端编写
    1)创建套接字(socket)
    2)向服务器发送数据(sendto)
    3)关闭套接字
    在所有的套接字编程中第一步都是加载套接字库(WSAStartup)
    对于每一个WSAStartup函数的成功调用,在最后都要对应一个WSACleanUp调用。

    二、源码:

    1.TCP服务器端:

    #include <Winsock2.h>
    #include <stdio.h>

    void main()
    {
     WORD wVersionRequested;
     WSADATA wsaData;
     int err;
     
     wVersionRequested = MAKEWORD( 1, 1 );
     
     err = WSAStartup( wVersionRequested, &wsaData );
     if ( err != 0 ) {
      return;
     }
     

     if ( LOBYTE( wsaData.wVersion ) != 1 ||
            HIBYTE( wsaData.wVersion ) != 1 ) {
      WSACleanup( );
      return;
     }
     SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);

     SOCKADDR_IN addrSrv;
     addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
     addrSrv.sin_family=AF_INET;
     addrSrv.sin_port=htons(6000);

     bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

     listen(sockSrv,5);

     SOCKADDR_IN addrClient;
     int len=sizeof(SOCKADDR);

     while(1)
     {
      SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
      char sendBuf[100];
      sprintf(sendBuf,"Welcome %s to http://www.sunxin.org",
       inet_ntoa(addrClient.sin_addr));
      send(sockConn,sendBuf,strlen(sendBuf)+1,0);
      char recvBuf[100];
      recv(sockConn,recvBuf,100,0);
      printf("%s/n",recvBuf);
      closesocket(sockConn);
     }
    }

    2.TCP客户端:

    #include <Winsock2.h>
    #include <stdio.h>

    void main()
    {
     WORD wVersionRequested;
     WSADATA wsaData;
     int err;
     
     wVersionRequested = MAKEWORD( 1, 1 );
     
     err = WSAStartup( wVersionRequested, &wsaData );
     if ( err != 0 ) {
      return;
     }
     

     if ( LOBYTE( wsaData.wVersion ) != 1 ||
            HIBYTE( wsaData.wVersion ) != 1 ) {
      WSACleanup( );
      return;
     }
     SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);

     SOCKADDR_IN addrSrv;
     addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
     addrSrv.sin_family=AF_INET;
     addrSrv.sin_port=htons(6000);
     connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

     char recvBuf[100];
     recv(sockClient,recvBuf,100,0);
     printf("%s/n",recvBuf);
     send(sockClient,"This is lisi",strlen("This is lisi")+1,0);

     closesocket(sockClient);
     WSACleanup();
    }

    3.UDP服务器端

    #include <Winsock2.h>
    #include <stdio.h>

    void main()
    {
     WORD wVersionRequested;
     WSADATA wsaData;
     int err;
     
     wVersionRequested = MAKEWORD( 1, 1 );
     
     err = WSAStartup( wVersionRequested, &wsaData );
     if ( err != 0 ) {
      return;
     }
     

     if ( LOBYTE( wsaData.wVersion ) != 1 ||
            HIBYTE( wsaData.wVersion ) != 1 ) {
      WSACleanup( );
      return;
     }

     SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);
     SOCKADDR_IN addrSrv;
     addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
     addrSrv.sin_family=AF_INET;
     addrSrv.sin_port=htons(6000);

     bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

     SOCKADDR_IN addrClient;
     int len=sizeof(SOCKADDR);
     char recvBuf[100];

     recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
     printf("%s/n",recvBuf);
     closesocket(sockSrv);
     WSACleanup();
    }

    4.UDP客户端

    #include <Winsock2.h>
    #include <stdio.h>

    void main()
    {
     WORD wVersionRequested;
     WSADATA wsaData;
     int err;
     
     wVersionRequested = MAKEWORD( 1, 1 );
     
     err = WSAStartup( wVersionRequested, &wsaData );
     if ( err != 0 ) {
      return;
     }
     

     if ( LOBYTE( wsaData.wVersion ) != 1 ||
            HIBYTE( wsaData.wVersion ) != 1 ) {
      WSACleanup( );
      return;
     }

     SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
     SOCKADDR_IN addrSrv;
     addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
     addrSrv.sin_family=AF_INET;
     addrSrv.sin_port=htons(6000);

     sendto(sockClient,"Hello",strlen("Hello")+1,0,
      (SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
     closesocket(sockClient);
     WSACleanup();
    }
     

    展开全文
  • VC socket通讯

    2012-08-16 16:06:03
    socket 通讯程序,使用了线程池,ACE中间件,IOCP等技术
  • 最近,要做一个东西,是android客户端要与VC写的服务器端进行数据连接与交换,无奈,先从java测试吧,android还没弄,其实只要是遵循的同一个协议就可以通信了,不管你的客户端和服务器是什么编程语言,什么操作系统...
  • vc6.0 Socket

    2012-06-18 10:18:37
    Socket;服务端 客户端 实现连接 通信。
  • vc socket通信

    2010-03-29 16:16:16
    利用socket进行通信 包括服务器 客户端
  • VC socket编程

    2010-01-06 10:40:05
    socket 服务器客户端通讯,简单的聊天网络工具。
  • VC Socket聊天程序

    2009-05-21 11:04:51
    VC Socket聊天程序源代码,采用异步Socket方式执行,比多线程同步socket更快
  • VC socket 发送文件

    热门讨论 2010-01-22 11:45:29
    VC socket 发送文件 有发送端和接收端,
  • VC SOCKET实例源码

    2010-08-03 16:05:25
    VC编写的SOCKET实例,有服务端和客户端,适应初学者
  • VC编制Socket客户端

    2010-01-19 12:03:37
    VC编制Socket客户端,可以正常使用。
  • 魔域服务器端socket部分vc 2005代码
  • VC Socket通信

    2011-11-25 08:46:06
    写了一个 基于服务器端的聊天工具,任一个客户端 的聊天内容 都会通过服务器端 发送到其他 客户端。
  • 多线程编程技术 vc socket 多线程编程技术 vc socket 多线程编程技术 vc socket 多线程编程技术 vc socket

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,989
精华内容 795
关键字:

socketvc