zoukankan      html  css  js  c++  java
  • 【转】C++ Socket UDP "Hello World!"

    //////////////////////////////////////////////////////////////////////////
    // 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;
    }
    

  • 相关阅读:
    POJ1579Function Run Fun
    C++ 程序员必读书目清单
    zoj2100Seeding(水题)
    接口开发及技术负责
    哪些需求最重要
    地址
    哪些需求最重要
    setTimeOut与 setInterval区别
    项目管理简介
    项目管理简介
  • 原文地址:https://www.cnblogs.com/lebronjames/p/1891016.html
Copyright © 2011-2022 走看看