windows 网络编程

废话不多说直接上代码,最经典的客户端,服务端  实现方式:

服务端:

#pragma comment(lib,"ws2_32.lib")
int _tmain(int argc, _TCHAR* argv[])
{
    WORD wVersionReguested ;  
    WSADATA  wsaData ;  
    int err;  
    wVersionReguested = MAKEWORD( 1 ,1 );  
    err = WSAStartup(wVersionReguested ,&wsaData ) ;  
    if( err !=0 )  
    {
        return 1;  
    }  
    if(LOBYTE(wsaData.wVersion )!=1 || HIBYTE(wsaData.wVersion)!=1)  
    {  
        WSACleanup() ;  
        return 1;  
    }  
    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(8000) ;  
    //绑定套接字  
    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,"welcom %s here !\n",inet_ntoa(addrClient.sin_addr));  
        //发送数据  
        send(sockConn ,sendBuf ,strlen(sendBuf)+1,0) ;  
        char recvBuf[100];  
        recv(sockConn, recvBuf,100,0);  
        printf("recv: %s\n",recvBuf) ;  
        closesocket(sockConn) ;  
    } 
	return 0;
}
客户端代码:

#pragma comment(lib,"ws2_32.lib")

HMODULE		ws2_base;
int _tmain(int argc, _TCHAR* argv[])
{
	WORD wVersionRequested ;  
	pWSAStartup		WSAStartupFunc;
	psocket			socketFunc;
	pconnect		connectFunc;
	precv			recvFunc;
	psend			sendFunc;
	pclosesocket	closesocketFunc;
	pWSACleanup		WSACleanupFunc;
	pinet_addr		inet_addrFunc;
	phtons			htonsFunc;

    WSADATA			wsaData ;
	SOCKADDR_IN		addrSrv;
    int err;  


	ws2_base		= LoadLibrary("WS2_32.dll");
	socketFunc		= (psocket)GetProcAddress(ws2_base,"socket");
	connectFunc		= (pconnect)GetProcAddress(ws2_base,"connect");
	recvFunc		= (precv)GetProcAddress(ws2_base,"recv");
	sendFunc		= (psend)GetProcAddress(ws2_base,"send");
	closesocketFunc	= (pclosesocket)GetProcAddress(ws2_base,"closesocket");
	WSAStartupFunc	= (pWSAStartup)GetProcAddress(ws2_base,"WSAStartup");
	WSACleanupFunc	= (pWSACleanup)GetProcAddress(ws2_base,"WSACleanup");
	inet_addrFunc	= (pinet_addr)GetProcAddress(ws2_base,"inet_addr");
	htonsFunc		= (phtons)GetProcAddress(ws2_base,"htons");

    wVersionRequested = MAKEWORD( 1, 1) ;
    err = WSAStartupFunc( wVersionRequested ,&wsaData );  
    if(err != 0)  
    {  
        return 1;  
    }  
	if ((int)WSAStartupFunc != (int)WSAStartup)
		printf("error !!\n");
    if(LOBYTE(wsaData.wVersion ) !=1 ||HIBYTE( wsaData.wVersion ) != 1)  
    {  
        WSACleanupFunc();  
        return 1;  
    }


    //创建套接字  
    SOCKET sockClient = socketFunc(AF_INET , SOCK_STREAM ,0) ; 
    addrSrv.sin_addr.S_un.S_addr = inet_addrFunc("127.0.0.1");  
    addrSrv.sin_family = AF_INET ;  
    addrSrv.sin_port = htonsFunc(8000);

    connectFunc(sockClient ,(SOCKADDR*)&addrSrv ,sizeof(SOCKADDR ));  

    //接收数据;  
    char recvBuf[100];  
    recvFunc(sockClient ,recvBuf,100,0) ;  
    printf("recv :%s",recvBuf) ;  
    sendFunc(sockClient ,"this is the client ",strlen("this is the client ") +1,0) ;  
    closesocketFunc(sockClient);  
    WSACleanupFunc ();
	return 0;
}

结果客户端打印:



服务端打印:


客户端有些画蛇添足了,api不用 getproceaddress来着,直接调用就可以了。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值