项目实战Small example:C:Socket之UDP编程 [控制台程序]

项目实战Small example:C:Socket之UDP编程 [控制台程序]

 

==================================================================

编辑环境:win10_x64 /VS2015

项目名称:C:Small exampleC:Socket之udp编程 [控制台程序]

项目简介:Socket的Udp编程,在这里运行了一个win32控制台的程序,一个服务器,一个客户端之间的通信,对socket编程的一个加深入门理解.

项目功能:实现了可以服务器分发多个消息,多个客户及机都可以接收到,但是我在运行结果的之中,有时候很快就达到。有时候需要好久才能能够到达(好几秒钟)。且还都会将消息将其显示出来。

其他:这里面就不在次开虚拟机了,把以前运行的截图拿出来,刚写了TCP的,Udp的原理比之简单,就不细化完全重新写了

==================================================================

项目运行效果:

 

==================================================================

项目思路分析:

 

==================================================================

项目主要源码:

服务器端:

// udp_server.cpp : 定义控制台应用程序的入口点。

//
//下面是一个最简单的 UDP 服务器程序 UDPServer. 它运行之后,进入无限循环,监听
//4567 端口到来的 UDP 封包,如果发现就将用户数据以字符串形式打印出来。相关代码如下。

#include "stdafx.h"
#pragma comment(lib, "WS2_32")


int main()
{
	system("title UDP_Server_2018_1_11");

	WSADATA wsaDate;
	WSAStartup(MAKEWORD(2, 2), &wsaDate);

	// 创建套接字
	SOCKET sockServer = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

	if (sockServer == INVALID_SOCKET)
	{
		printf("Failed socket()\n");
	}

	// 填充 sockaddr_in 结构
	SOCKADDR_IN addrServer;
	addrServer.sin_addr.S_un.S_addr = INADDR_ANY;
	addrServer.sin_family = AF_INET;
	addrServer.sin_port = htons(3456);

	// 绑定这个套接字到一个本地地址
	if (SOCKET_ERROR == bind(sockServer, (SOCKADDR *)&addrServer, sizeof(SOCKADDR_IN)))
	{
		printf("Failed bin()\n");
		return 0;
	}

	// 接收数据
	char szRecvBuf[1024] = "";
	SOCKADDR_IN addrClient;
	//SOCKET sockClient;   //*****UDP这里没有这个*****
	int len = sizeof(SOCKADDR_IN);


	while (true)
	{
		int nRecv = recvfrom(sockServer, szRecvBuf, 1024, 0, (SOCKADDR *)&addrClient, &len); //接收返回总的字节数

		if (nRecv > 0)
		{
			szRecvBuf[nRecv] = '\0';
			printf("接收到数据(%s):%s\n", inet_ntoa(addrClient.sin_addr), szRecvBuf);
		}

	}

	//关闭套接字
	closesocket(sockServer);

	//关闭这个库
	WSACleanup();

	return 0;
}

客户端:

// udp_client.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#pragma comment(lib, "WS2_32")

int main()
{
	// 初始化Winsock库
	WSADATA wsaData;
	WSAStartup(MAKEWORD(2, 2), &wsaData);

	// 创建套节字
	SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);


	// 也可以在这里调用bind函数绑定一个本地地址
	// 否则系统将会自动安排

	// 填写远程地址信息
	SOCKADDR_IN addrClient;
	char szbuf[20] = "";
	printf("请输入服务器的IP:");
	scanf("%s", szbuf);
	addrClient.sin_addr.S_un.S_addr = inet_addr(szbuf);
	addrClient.sin_family = AF_INET;
	addrClient.sin_port = htons(3456);

	// 注意,这里要填写服务器程序所在机器的IP地址  如果你的计算机没有联网,直接使用127.0.0.1即可
	// 发送数据
	char szSendBuf[1024] = "";
	while (true)
	{
		printf(">>");
		scanf("%s", szSendBuf);
		sendto(sockClient, szSendBuf, strlen(szSendBuf) + 1, 0, (SOCKADDR *)&addrClient, sizeof(SOCKADDR_IN));
	}


	closesocket(sockClient);
	WSACleanup();



	return 0;
}


 

=================更新时间2019-03==================
源码下载:example:C:Socket之UDP编程 [控制台程序]

 

 

 

系列地址:

QtExamples

欢迎 starfork 这个系列的 QT / DTK 学习,附学习由浅入深的目录。

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偕臧x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值