105.UDP通信实现广播
- 客户端
#include <stdio.h>
#include <string.h>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib") void main()
{
//存放版本
WORD wversion;
//指针,存放网络执行信息
WSADATA wsadata;
//管理错误,标号
int err; //客户端套接字,用于连接
SOCKET sockclient;
//服务器地址
SOCKADDR_IN addrserver;
//客户端地址
SOCKADDR_IN addrclienet; //长度
int length = ;
//接收
char recvstr[] = { };
//标示
BOOL bflags=;
//设定版本
wversion = MAKEWORD(, );
err = WSAStartup(wversion, &wsadata);
if (err!=)
{
printf("获取版本失败");
return;
} if (LOBYTE(wsadata.wVersion)!= || HIBYTE(wsadata.wVersion)!=)
{
printf("版本对比失败,不一致");
return;
}
//UDP报文传输
sockclient = socket(AF_INET, SOCK_DGRAM, );
//setsockopt()函数,用于任意类型、任意状态套接口的设置选项值。
//尽管在不同协议层上存在选项,但本函数仅定义了最高的“套接口”层次上的选项。
//多播必须指定的参数
//flags设定,1代表广播,0禁止广播
setsockopt(sockclient, SOL_SOCKET, SO_REUSEADDR, &bflags, sizeof(bflags)); //存放客户端ip地址
addrclienet.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrclienet.sin_family = AF_INET;
addrclienet.sin_port = htons();//端口
//客户端套接字与客户端信息绑定
bind(sockclient, (SOCKADDR*)&addrclienet, sizeof(SOCKADDR));
//等于地址长度
length = sizeof(SOCKADDR);
while ()
{
printf("wait-----------------\n");
//从客户端接收消息,地址信息存放在addrserver中
recvfrom(sockclient, recvstr, , , (SOCKADDR*)&addrserver, &length);
if (WSAGetLastError()!=)
{
puts("收取失败");
}
//哪个服务器发送的
printf("%s speak %s\n", inet_ntoa(addrserver.sin_addr), recvstr);
}
closesocket(sockclient);
WSACleanup();
system("pause");
} - 服务器端
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib") void main()
{
WORD wversion;//存放版本
WSADATA wsadata;//指针,存放网络执行信息
int err;//管理错误,标号 SOCKET socksever;//服务器套接字
//记录服务器信息
SOCKADDR_IN addrserver;
//记录客户端信息
SOCKADDR_IN addrclienet; int length = ;
char sendstr[] = { };
BOOL bflags = ;//标示
wversion = MAKEWORD(, );//设定版本
err = WSAStartup(wversion, &wsadata);
if (err != )
{
printf("获取版本失败");
return;
} if (LOBYTE(wsadata.wVersion) != || HIBYTE(wsadata.wVersion) != )
{
printf("版本对比失败,不一致");
return;
} socksever = socket(AF_INET, SOCK_DGRAM, );//报文
// SO_BROADCAST多播必须指定的参数
//flags设定,1代表广播,0禁止广播
setsockopt(socksever, SOL_SOCKET, SO_BROADCAST, &bflags, sizeof(bflags));//绑定 addrserver.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//任意主机
addrserver.sin_family = AF_INET;
addrserver.sin_port = htons();//端口 //服务器信息与套接字绑定
bind(socksever, (SOCKADDR*)&addrserver, sizeof(SOCKADDR));//绑定 //填写广播,255.255.255.255,广播
addrclienet.sin_addr.S_un.S_addr = inet_addr("255.255.255.255");
addrclienet.sin_family = AF_INET;
addrclienet.sin_port = htons();//端口 length = sizeof(SOCKADDR);//保存地址长度 while ()
{
memset(sendstr, , );
scanf("%s", sendstr);//获取读取
//发送消息到客户端(广播)
sendto(socksever, sendstr, strlen(sendstr), , (SOCKADDR*)&addrclienet, length);
}
closesocket(socksever);
WSACleanup();
system("pause");
}
105.UDP通信实现广播的更多相关文章
- 高性能 TCP & UDP 通信框架 HP-Socket v3.3.1
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- HP-SOCKET TCP/UDP通信框架库解析
项目概述: HP-SOCKET是一套通用TCP/UDP通信框架,包括服务器.客户端.Agent组件:其目标是提供高性能.通用性.简易性.可扩展.可定制: 鉴于此,其仅实现基本的通用框架通信.数据收发功 ...
- UDP 单播、广播和多播
阅读目录(Content) 一.UDP广播 二.UDP多播 1.多播(组播)的概念 2.广域网的多播 三.UDP广播与单播 广播与单播的比较 使用UDP协议进行信息的传输之前不需要建议连接.换句话说就 ...
- QT之UDP通信
前言:前一篇讲了TCP通信,这篇来看看UDP通信. 这里说明一下,UDP通信中分为三种通信分别为单播.组播和广播,下面将一一为大家介绍. 同样的我们都需要在工程文件中添加network QT += c ...
- java 网络编程之UDP通信和简单的群聊程序
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- UDP收/发广播包原理及步骤
原文链接地址:http://www.2cto.com/net/201311/254834.html UDP收/发广播包原理及步骤 如果网络中两个主机上的应用程序要相互通信,其一要知道彼此的IP,其二要 ...
- java基础 UDP通信 user datagram protocol 用户数据豆协议 TCP transmission control protocol 传输控制协议 多线程TCP
无连接通信 UDP 客户端 package com.swift.test; import java.io.IOException; import java.net.DatagramPacket; im ...
- Python的网络编程[0] -> socket[2] -> 利用 socket 建立 TCP/UDP 通信
Socket 目录 socket 的 TCP/IP 通信基本建立过程 socket 的 UDP 通信基本建立过程 socket 的 UDP 广播式通信基本建立过程 socket 的多线程通信建立过程 ...
- vector(可变数组) 用于UDP通信
头文件: #include<vector.h> 然后,声明并初始化vctor数组. vector<char> str(len); 其中len可以是变量或者常量.(其实用常量就 ...
随机推荐
- 怎么在cmd中输入mysql就可以进去mysql控制台
执行命令 设置cmd以管理员身份运行
- ORA-12012 Error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_<NN> in 12.2.0 Database
报错如下:ORA-12012: error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_88"ORA-2000 ...
- LINUX中,find结合grep正则表达式,快速查找代码文件。
###目的###LINUX中,find结合grep正则表达式快速查找代码. 例如经常有需求:查找当前目录下所有.h文件中,"public开头,中间任意字符,以VideoFrameReceiv ...
- Ubuntu 16.04 实现有线 无线同时用
因为工作的原因,经常会用有线网卡连接服务器进行配置,无线网卡上外网. 一.查看当前网关信息 pipci@ubuntu:~$ ip route showdefault via 192.168.2.1 d ...
- Linux系统中命令提示符解释-Linux中命令格式、分类-bash中的快捷键
1.命令提示符 [root@mysqlserver01 opt]# [root@mysqlserver01 ~]# root 当前用户名 @ 固定的(格式) mysqlserver01 主机名 opt ...
- Flex与Java通信之HttpService
flashbuilder4.6.myeclipse10 参考:http://www.cnblogs.com/lovemoon714/archive/2012/05/25/2517684.html 1. ...
- 03012_预处理对象executeQuery方法(实现数据库的查询)
1.概述 (1)通过预处理对象的executeQuery方法,完成记录的select语句的执行: (2)操作格式统一如下: ①注册驱动: ②获取连接: ③获取预处理对象: ④SQL语句占位符设置实际参 ...
- 【Uva 10118】Free Candies
[Link]: [Description] 有4堆书; 每本书编号从1..20 每堆书都是N本; 然后每次只能从任意一堆的堆顶拿一本书装到自己的口袋里; 你的口袋最多容纳5本书; 当你的口袋里有两本一 ...
- 洛谷 P1732 [TJOI2011]序列
P1732 [TJOI2011]序列 题目描述 一指数列A={a1, a2, …, an},根据数列A计算数列B={b1, b2, …, bn},其中: 求\sum\limits^n_{i=1} b_ ...
- mysql字符设置乱码问题
在操作系统中对于任意一个字符而言是没有编码格式概念的:同样的字母在不同的编码集里面可能代表不同的东西:关键在于你用什么样的软件打开它,软件本身是以什么样的编码格式来显示你的字符,那么你的字符当前就是什 ...