您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页【转】C++ Socket UDP "Hello World!"

【转】C++ Socket UDP "Hello World!"

来源:五一七教育网

//
// UDPServer.cpp

#include <stdio.h>
#include <WINSOCK2.H>

#pragma comment(lib,"WS2_32.lib")
#define BUF_SIZE	

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	

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

转载于:https://www.cnblogs.com/lebronjames/archive/2010/11/29/11016.html

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务