c++ udp socket学习

//////////////////////////////////////////////////////////////////////////  
// UDPServer.cpp  
  
#include <stdio.h>  
#include <WINSOCK2.H>  
  
#pragma comment(lib,"WS2_32.lib")  
#define BUF_SIZE    64  
  
int main(void)  
{  
    WSADATA wsd;  
    SOCKET  s;  
    int     nRet;  
  
    // 初始化套接字动态库  
    if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)  
    {  
        printf("WSAStartup failed !/n");  
        return 1;  
    }  
  
    // 创建套接字  
    s = socket(AF_INET,SOCK_DGRAM,0);  
    if(s == INVALID_SOCKET)  
    {  
        printf("socket() failed ,Error Code:%d/n",WSAGetLastError());  
        WSACleanup();  
        return 1;  
    }  
  
    SOCKET      socketSrv = socket(AF_INET,SOCK_DGRAM,0);  
    SOCKADDR_IN addrSrv;  
    SOCKADDR_IN addrClient;  
    char        buf[BUF_SIZE];  
    int         len = sizeof(SOCKADDR);  
  
    // 设置服务器地址  
    ZeroMemory(buf,BUF_SIZE);  
    addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);  
    addrSrv.sin_family = AF_INET;  
    addrSrv.sin_port = htons(5000);  
  
    // 绑定套接字  
    nRet = bind(socketSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));  
    if(SOCKET_ERROR == nRet)     
    {     
        printf("bind failed !/n");     
        closesocket(s);     
        WSACleanup();     
        return -1;     
    }  
  
    // 从客户端接收数据  
    nRet = recvfrom(socketSrv,buf,BUF_SIZE,0,(SOCKADDR*)&addrClient,&len);  
    if(SOCKET_ERROR == nRet)     
    {     
        printf("recvfrom failed !/n");     
        closesocket(s);     
        WSACleanup();     
        return -1;     
    }  
    // 打印来自客户端发送来的数据  
    printf("Recv From Client:%s/n",buf);  
  
    // 向客户端发送数据  
    sendto(socketSrv,"UDP Hello World !",sizeof("UDP Hello World !"),0,(SOCKADDR*)&addrClient,len);  
    closesocket(s);  
    WSACleanup();  
    return 0;  
}  
 

 

 

//////////////////////////////////////////////////////////////////////////  
// UDPClient.cpp  
  
#include <stdio.h>  
#include <WINSOCK2.H>  
  
#pragma comment(lib,"WS2_32.lib")  
#define BUF_SIZE    64  
  
int main(void)  
{  
    WSADATA wsd;      
    SOCKET  s;  
  
    // 初始化套接字动态库  
    if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)  
    {  
        printf("WSAStartup failed !/n");  
        return 1;  
    }  
  
    // 创建套接字  
    s = socket(AF_INET,SOCK_DGRAM,0);  
    if(s == INVALID_SOCKET)  
    {  
        printf("socket() failed, Error Code:%d/n",WSAGetLastError());  
        WSACleanup();  
        return 1;  
    }  
  
    char        buf[BUF_SIZE];  // 接受数据  
    SOCKADDR_IN servAddr;       // 服务器套接字地址  
    SOCKET      sockClient = socket(AF_INET,SOCK_DGRAM,0);  
    int         nRet;  
  
    ZeroMemory(buf,BUF_SIZE);  
    strcpy(buf,"UDP Hello World !");  
  
    // 设置服务器地址  
    servAddr.sin_family = AF_INET;  
    servAddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.254");  
    servAddr.sin_port = htons(5000);  
  
    // 向服务器发送数据  
    int nServAddLen = sizeof(servAddr);  
    if(sendto(sockClient,buf,BUF_SIZE,0,(sockaddr *)&servAddr,nServAddLen) == SOCKET_ERROR)  
    {  
        printf("recvfrom() failed:%d/n",WSAGetLastError());  
        closesocket(s);  
        WSACleanup();  
        return 1;  
    }  
    nRet = recvfrom(sockClient,buf,BUF_SIZE,0,(sockaddr *)&servAddr,&nServAddLen);  
    if(SOCKET_ERROR == nRet)     
    {     
        printf("recvfrom failed !/n");     
        closesocket(s);     
        WSACleanup();     
        return -1;     
    }  
  
    // 打印来自服务端发送来的数据  
    printf("Recv From Server:%s/n",buf);  
    closesocket(s);  
    WSACleanup();  
    return 0;  
}  

猜你喜欢

转载自blog.csdn.net/penghejuan2012/article/details/83414462