//MySocket.h
#include "stdafx.h"
#include <winsock2.h>
#include <Afxsock.h>
#pragma comment(lib,"ws2_32.lib")class CMySocket
{
pulic:
     CMySocket();
     ~CMySocket();
     int Close( void );
     int Connect( char* strRemote, unsigned int iPort );
     int Bind( char* strIP, unsigned int iPort );
     int Accept( SOCKET s );
     int AsyncSelect( HWND hWnd, unsigned int wMsg, long lEvent );
     int Listen( int iQueuedConnections );
     int Send( char* strData, int iLen );
     int Receive( char* strData, int iLen );
     int set_LastError( char* newError, int errNum );
};
//MySocket.cpp
#include "MySocket.h"CMySocket::CMySocket()

WSADATA wsaD; 
    memset( m_LastError, 0, ERR_MAXLENGTH );
    memset( &m_sockaddr, 0, sizeof( m_sockaddr ) ); 
    memset( &m_rsockaddr, 0, sizeof( m_rsockaddr ) );
    int result = WSAStartup((WORD)((1<<8|1), &wsaD);
    if( result != 0 ) 

   set_LastError( "WSAStartup failed!", WSAGetLastError() );
       return;
}
}//////////////////////////////
CMySocket::~CMySocket() 
{  
WSACleanup(); 
}////////////////////////////////////////////////////
int CMySocket::Create( void )
{

    if ( (m_hSocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP )) == INVALID_SOCKET )
{
        set_LastError( "socket() failed", WSAGetLastError() );
        return ERR_WSAERROR;
}
    return ERR_SUCCESS; 
}
///////////////////////////////////////////////
int CMySocket::Close( void )
{
    if ( closesocket( m_hSocket ) == SOCKET_ERROR )
{
        set_LastError( "closesocket() failed", WSAGetLastError() );
        return ERR_WSAERROR;
}
    memset( &m_sockaddr, 0, sizeof( sockaddr_in ) ); 
    memset( &m_rsockaddr, 0, sizeof( sockaddr_in ) );
    return ERR_SUCCESS;
}
/////////////////////////////////////////
int CMySocket::Connect( char* strRemote, unsigned int iPort )
{
    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 CMySocket::Bind( char* strIP, unsigned int iPort )
{
     if( strlen( strIP ) == 0 || iPort == 0 )
     return ERR_BADPARAM;
     memset( &m_sockaddr,0, sizeof( 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 CMySocket::Accept( SOCKET s )

     int Len = sizeof( m_rsockaddr );
     memset( &m_rsockaddr, 0, sizeof( 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 CMySocket::AsyncSelect( HWND hWnd, unsigned int wMsg, long lEvent )
{
     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 CMySocket::Listen( int iQueuedConnections )
{
     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 CMySocket::Send( char* strData, int iLen )
{
     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 CMySocket::Receive( char* strData, int iLen )
{
    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;
}void CMySocket::set_LastError( char* newError, int errNum ){
       memset( m_LastError, 0, ERR_MAXLENGTH ); 
       memcpy( m_LastError, newError, strlen( newError ) );
       m_LastError[strlen(newError)+1] = '\0';
}

解决方案 »

  1.   

    编译后出现以下错误:   --------------------Configuration: SocketTcp - Win32 Debug--------------------
    Compiling...
    MySocket.cpp
    e:\microsoft visual studio\myprojects\sockettcp\mysocket.cpp(162) : fatal error C1010: unexpected end of file while looking for precompiled header directive
    Error executing cl.exe.SocketTcp.exe - 1 error(s), 0 warning(s)
    这是什么原因呀?大哥们就帮帮我这个刚入门的菜鸟吧!
      

  2.   

    #include "stdafx.h"
    在你的//MySocket.cpp里面
      

  3.   

    可以使用右键点击项目工程中的该cpp文件,选择setting,在c/c++栏,选择PreCompiled headers,然后设置第一选项,选择不使用预编译头,解决这个问题。 
    http://www.china-askpro.com/msg24/qa08.shtml