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可以是变量或者常量.(其实用常量就 ...
随机推荐
- 轻松掌握Ubuntu Linux的3D桌面快捷键使用
视频下载地址: http://115.com/file/be4n23v6#linux3d.rar 轻松掌握Ubuntu Linux的3D桌面快捷键使用 高级3D桌面展示 本文出自 "李晨光原 ...
- Ubuntu 16.04 实现有线 无线同时用
因为工作的原因,经常会用有线网卡连接服务器进行配置,无线网卡上外网. 一.查看当前网关信息 pipci@ubuntu:~$ ip route showdefault via 192.168.2.1 d ...
- angular实现简单的pagination分页组件
不想使用第三方库,只想使用一个分页器,那么就简单的实现一个,效果如下: 1.使用方式: <custom-pagination *ngIf="enterpriseList.length& ...
- 【Nginx从入门到实战】
目录 1. 网站服务 2. 所谓Nginx 3. 安装Nginx 4. Nginx配置文件详述 5. 开始玩转Nginx Nginx虚拟主机 Nginx状态信息(status)配置 Nginx错误页面 ...
- Chrome OS 70 发布:这是安卓的私生子吗?
谷歌于28日正式宣布推出Chrome OS 70.这个最新的Chrome OS系统在一些设计上具备了更多安卓风味,为配备了触摸屏的Chromebook.平板电脑和二合一设备带来了操作界面改善. 据9t ...
- 今日SGU 5.14
//SGU 131 还没完全想清楚 留坑 SGU 259 题意:一个机器处理n个任务,每个任务有时间t和传送时间l 收获:贪心 #include<bits/stdc++.h> #defin ...
- CS224d lecture 9札记
欢迎转载.转载注明出处: http://blog.csdn.net/neighborhoodguo/article/details/47193885 近期几课的内容不是非常难.还有我的理解能力有所提高 ...
- Java Swing设置主窗体位置居中方法
01.第一种方法 int windowWidth = frame.getWidth(); //获得窗体宽 int windowHeight = frame.getHeight(); //获得窗体高 ...
- angularjs之ui-bootstrap的Datepicker Popup不使用JS实现双日期选择控件
最开始使用ui-bootstrap的Datepicker Popup日期选择插件实现双日期选择时间范围时,在网上搜了一些通过JS去实现的方法,不过后来发现可以不必通过JS去处理,只需要使用其自身的属性 ...
- ONVIF客户端搜索设备获取rtsp地址开发笔记(精华篇)
原文 http://blog.csdn.net/gubenpeiyuan/article/details/25618177 概要: 目前ONVIF协议家族设备已占据数字监控行业半壁江山以上,亲, ...