IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 网络编程之UDP初级实现 -> 正文阅读

[网络协议]网络编程之UDP初级实现

服务端:

#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>
#include <WS2tcpip.h>
#include <iostream>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
using namespace  std;

int main()
{
	WSADATA wsaData;
	int ret = 0;
	if ((ret = WSAStartup(MAKEWORD(2,2),&wsaData)) != 0)
	{
		return -1;
	}
	// AF_INET 表示采用TCP/IP协议族
	// SOCK_STREAM 表示采用TCP协议
	// 0是通常的默认情况
	SOCKET InSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

	SOCKADDR_IN Addr;
	Addr.sin_addr.S_un.S_addr = INADDR_ANY; //inet_addr("0.0.0.0"); 
	Addr.sin_family = AF_INET; //AF_INET 表示采用TCP/IP协议族    当sockaddr_in.sin_family = AF_INET时,sockaddr = sockaddr_in。
	Addr.sin_port = htons(12345);// socket对应的端口

	// 将socket绑定到某个IP和端口(IP标识主机,端口标识通信进程)
	bind(InSocket, (SOCKADDR *)&Addr, sizeof(SOCKADDR));

	SOCKADDR_IN AddrClient;  //&addrClient是缓冲区地址,保存了客户端的IP和端口等信息
	int ClientAddrLen = sizeof(SOCKADDR_IN); //len是包含地址信息的长度
	while (1)
	{
		char RecvBuff[1024] = { 0 };
		recvfrom(InSocket, RecvBuff, 1024, 0, (SOCKADDR *)&AddrClient, &ClientAddrLen);

		printf("端口是%d  ", ntohs(AddrClient.sin_port));//ntohs 将网络字节序转为主机字节序
		printf("IP是%s  ", inet_ntoa(AddrClient.sin_addr));//IP  net_ntoa 函数转换网络字节排序的地址为标准的ASCII以点分开的地址
		printf("数据是%s\n", RecvBuff);

		memset(RecvBuff, 0, 1024);
		sprintf_s(RecvBuff, 1024, "你好,客户端!我是服务器");
		sendto(InSocket, RecvBuff, strlen(RecvBuff), 0, (SOCKADDR*)&AddrClient, sizeof(SOCKADDR));
	}

	//关闭
	closesocket(InSocket);
	WSACleanup();
	getchar();
	return 0;
}


客户端

#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>
#include <iostream>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
using namespace  std;

int main()
{
	WSADATA wsaData;
	int ret = 0;
	if ((ret = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)
	{
		return -1;
	}

	SOCKET Socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	//以广播的形式
	//BOOL optval = TRUE;
	//setsockopt(InSocket, SOL_SOCKET, SO_BROADCAST | SO_REUSEADDR, (char *)&optval, optval);

	//发送端IP和端口
	SOCKADDR_IN Addr;
	Addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	Addr.sin_family = AF_INET; //主机字节序
	Addr.sin_port = htons(54321);//将主机字节序变为网络字节序
	
	while (1)
	{
		sendto(Socket, "你好,服务器!我是客户端", strlen("你好,服务器!我是客户端"), 0, (SOCKADDR*)&Addr, sizeof(SOCKADDR));
		int len = sizeof(SOCKADDR);
		char buffer[1024] = { 0 };
		recvfrom(Socket, buffer, 1024, 0, (SOCKADDR*)&Addr, &len);
		printf("目标端口是%d  ", ntohs(Addr.sin_port));//ntohs 将网络字节序转为主机字节序
		printf("目标IP是%s  ", inet_ntoa(Addr.sin_addr));//IP  net_ntoa 函数转换网络字节排序的地址为标准的ASCII以点分开的地址
		printf("数据:%s\n",buffer);
	}
	
	//关闭
	closesocket(Socket);
	WSACleanup();
	getchar();
	return 0;
}
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-18 13:03:32  更:2021-08-18 13:05:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:30:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码