TCP/UDP Socket编程 C/C++实现(Windows Platform SDK)

TCP Socket编程 C/C++实现 (Windows Platform SDK)
Server:
------------------------------------------------------------ 
#pragma comment(lib, "ws2_32.lib")
#include <Winsock2.h>
#include <stdio.h> 
void main() 

    //版本协商 
    WORD wVersionRequested; 
    WSADATA wsaData; 
    int err; 
    wVersionRequested = MAKEWORD(1,1); //0x0101 
    err = WSAStartup(wVersionRequested,&wsaData); 
    if(err!=0) 
    { 
        return; 
    } 
    if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)  
        //wsaData.wVersion!=0x0101 
    { 
       WSACleanup(); 
        return; 
    } 
    //创建Socket 
    SOCKET sockSvr = socket(AF_INET,SOCK_STREAM,0); 
    //创建IP地址和端口 
    SOCKADDR_IN addrSvr; 
    addrSvr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); 
    addrSvr.sin_family = AF_INET; 
    addrSvr.sin_port = htons(6000); 
    //绑定端口监听 
    bind(sockSvr,(SOCKADDR*)&addrSvr,sizeof(SOCKADDR)); 
    listen(sockSvr,5); 
    sockaddr_in addrClient; 
    int len = sizeof(sockaddr); 
    while(true) 
    { 
        //阻塞方法,获得一个客户Socket连接 
        SOCKET sockConn = accept(sockSvr,(sockaddr*)&addrClient,&len); 
        char sendbuffer[128]; 
        sprintf(sendbuffer,"Welcom %s!",inet_ntoa(addrClient.sin_addr)); 
        //向客户Socket发送数据 
        send(sockConn,sendbuffer,strlen(sendbuffer)+1,0); 
        char recvbuffer[128]; 
        //从客户Soc接受数据 
        recv(sockConn,recvbuffer,128,0); 
        printf("%s/n",recvbuffer); 
      //关闭Socket 
        closesocket(sockConn);  
    } 
    closesocket(sockSvr); 
    //释放Winsock资源 
    WSACleanup(); 
}
Client:
--------------------------------------------------------
#pragma comment (lib,"ws2_32.lib")
#include <Winsock2.h>
#include <stdio.h>
void main() 

    //版本协商 
    WORD wVersionRequested; 
    WSADATA wsaData; 
    int err; 
    wVersionRequested = MAKEWORD(1,1); //0x0101 
    err = WSAStartup(wVersionRequested,&wsaData); 
    if(err!=0) 
    { 
        return; 
    } 
    if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)  
       //wsaData.wVersion!=0x0101 
    { 
        WSACleanup(); 
        return; 
    }
    //创建连向服务器的套接字 
    SOCKET sock = socket(AF_INET,SOCK_STREAM,0); 
    //创建地址信息 
    SOCKADDR_IN hostAddr; 
    hostAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); 
    hostAddr.sin_family = AF_INET; 
    hostAddr.sin_port = htons(6000); 
    //连接服务器 
    connect(sock,(sockaddr*)&hostAddr,sizeof(sockaddr)); 
    char revBuf[128]; 
    //从服务器获得数据 
    recv(sock,revBuf,128,0); 
   printf("%s/n",revBuf); 
    //向服务器发送数据 
    send(sock,"Hello Host!",12,0); 
    closesocket(sock); 
}
转自:http://blog.csdn.net/nyzhl/archive/2008/07/04/2612815.aspx
UDP Socket编程 C/C++实现 (Windows Platform SDK)
Server:
-------------------------------------------------------
#pragma comment (lib,"ws2_32.lib")
#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 ) { 
        /* Tell the user that we could not find a usable */
        /* WinSock DLL.                                  */
        return; 
    } 
    /* Confirm that the WinSock DLL supports 2.2.*/
    /* Note that if the DLL supports versions greater    */
    /* than 2.2 in addition to 2.2, it will still return */
    /* 2.2 in wVersion since that is the version we      */
    /* requested.                                        */
    if ( LOBYTE( wsaData.wVersion ) != 1 || 
        HIBYTE( wsaData.wVersion ) != 1) { 
        /* Tell the user that we could not find a usable */
        /* WinSock DLL.                                  */
        WSACleanup( ); 
         return;  
    } 
    /* The WinSock DLL is acceptable. Proceed. */
    //创建数据报套接字  
    SOCKET svr = socket(AF_INET,SOCK_DGRAM,0); 
    //创建本地地址信息 
    SOCKADDR_IN addr; 
    addr.sin_family = AF_INET; 
    addr.sin_port = htons(6000); 
    addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); 
   int len = sizeof(sockaddr); 
    bind(svr,(sockaddr*)&addr,len); 
    //创建客户端地址对象 
    SOCKADDR_IN addrClient; 
    char recvBuf[128]; 
    char sendBuf[128]; 
    char tempBuf[256];
    while(true) 
    { 
        //接收数据 
        recvfrom(svr,recvBuf,128,0,(sockaddr*)&addrClient,&len); 
        char* ipClient = inet_ntoa(addrClient.sin_addr); 
        sprintf(tempBuf,"%s said: %s/n",ipClient,recvBuf); 
        printf("%s",tempBuf); 
        gets(sendBuf); 
        //发送数据 
        sendto(svr,sendBuf,strlen(sendBuf)+1,0,(sockaddr*)&addrClient,len); 
    } 
    closesocket(svr); 
    WSACleanup(); 
}
Client:
------------------------------------------------------
#pragma comment (lib,"ws2_32.lib")
#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 ) { 
        /* Tell the user that we could not find a usable */
        /* WinSock DLL.                                  */
        return; 
    } 
    /* Confirm that the WinSock DLL supports 2.2.*/
    /* Note that if the DLL supports versions greater    */
    /* than 2.2 in addition to 2.2, it will still return */
    /* 2.2 in wVersion since that is the version we      */
    /* requested.                                        */
    if ( LOBYTE( wsaData.wVersion ) != 1 || 
        HIBYTE( wsaData.wVersion ) != 1 ) { 
        /* Tell the user that we could not find a usable */
        /* WinSock DLL.                                  */
        WSACleanup( ); 
        return;  
    } 
    /* The WinSock DLL is acceptable. Proceed. */
    //创建服务器套接字 
    SOCKET Svr = socket(AF_INET,SOCK_DGRAM,0); 
    //创建地址 
    SOCKADDR_IN addrSvr; 
    addrSvr.sin_family = AF_INET; 
    addrSvr.sin_port = htons(6000); 
    addrSvr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); 
    char recvBuf[128]; 
    char sendBuf[128]; 
    int len = sizeof(sockaddr); 
    while(true) 
    { 
        gets(sendBuf); 
        //发送数据 
        sendto(Svr,sendBuf,strlen(sendBuf)+1,0,(sockaddr*)&addrSvr,len); 
        //接收数据 
        recvfrom(Svr,recvBuf,128,0,(sockaddr*)&addrSvr,&len); 
        char* ipSvr = inet_ntoa(addrSvr.sin_addr); 
        printf("%s said: %s/n",ipSvr,recvBuf); 
    } 
    closesocket(Svr); 
    WSACleanup(); 
}

 

原文出处(点击此处)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值