原始套接字(服务器端)

来源:互联网 发布:查看php编译安装参数 编辑:程序博客网 时间:2024/04/29 03:29

 

服务器端线程处理函数(简单的只支持单client) :

 

UINT ServerFunc( LPVOID pParam );

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    
int nRetCode = 0;

    cout
<<"Hello, Welcome to socket"<<endl;

    AfxBeginThread(ServerFunc,
0,0);

    
while(_getch()!=27);
    
return nRetCode;
}


UINT ServerFunc( LPVOID pParam )
{
    cout
<<"Here is Thread"<<endl;

    
//WSAStartup
    WSADATA wsaData;
    
int ret = WSAStartup(0x101,&wsaData);
    
if(ret!=0)
    
{
        
return 1;
    }


    
//socket
    SOCKET server = socket(AF_INET,SOCK_STREAM,0);
    
if(server==INVALID_SOCKET)
    
{
        
return 1;
    }


    
//bind
    struct sockaddr_in server_addr;
    server_addr.sin_family 
= AF_INET;
    server_addr.sin_port 
= htons((u_short)20248);
    server_addr.sin_addr.s_addr 
= INADDR_ANY;
    ret 
= bind(server,(sockaddr*)&server_addr,sizeof(server_addr));
    
if(ret!=0)
    
{
        
return 1;
    }


    
//listen
    ret = listen(server,10);
    
if(ret!=0)
    
{
        
return 1;
    }


    SOCKET client;
    
struct sockaddr_in client_addr;
    
int client_len = sizeof(client_addr);//这个参数一定要有初值,否则在调用accept时会出错
    
    
while(TRUE)
    
{
        
char temp[512];
        
//accept
        client = accept(server,(sockaddr*)&client_addr,&client_len);
        sprintf(temp,
"Connect from %s",inet_ntoa(client_addr.sin_addr));
        cout
<<temp<<endl;
        sprintf(temp,
"You IP Addr is %s",inet_ntoa(client_addr.sin_addr));
        send(client,temp,strlen(temp),
0);
        closesocket(client);
    }

    closesocket(server);

    WSACleanup();

    
return 0;
}
原创粉丝点击