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可以是变量或者常量.(其实用常量就 ...
随机推荐
- 洛谷P4051 [JSOI2007]字符加密
题目描述 喜欢钻研问题的JS 同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一圈,显然,它们有很多种不同的读法. 例如‘JSOI07’,可以读作 ...
- SELinux 入门
几乎可以肯定每个人都听说过 SELinux (更准确的说,尝试关闭过),甚至某些过往的经验让您对 SELinux 产生了偏见.不过随着日益增长的 0-day 安全漏洞,或许现在是时候去了解下这个在 L ...
- 实现人脸识别性别之路---open CV将图片显示出来
import cv2filename='E:\\tensorflow\\bu.jpg'#图片的地址 # face_cascade=cv2.CascadeClassifier('C:\\anconda3 ...
- fgrep---指定的输入文件中的匹配模式的行
fgrep命令是用来搜索 file 参数指定的输入文件(缺省为标准输入)中的匹配模式的行.fgrep 命令特别搜索 Pattern 参数,它们是固定的字符串.如果在 File 参数中指定一个以上的文件 ...
- Centos6.5 安装lnmp环境
最近项目要配置在nginx上,所以搜索了下具体nginx的安装,看到这篇文章简洁明了而且测试成功就借用了,作品出处:http://www.cnblogs.com/xiaoit/p/3991037.ht ...
- amlogic M8操作gpio bank
參照规格书: r代表:读 a代表GPIOAO bank 0x28代表read bit echo r a 0x28 > /sys/class/amlogic/debug 操作GPIO口读取 w代表 ...
- POJ 2533 Longest Ordered Subsequence(dp LIS)
Language: Default Longest Ordered Subsequence Time Limit: 2000MS Memory Limit: 65536K Total Submis ...
- Array与ArrayList
代码图理解复杂代码 类图 1.抽象动物类Animal using System; using System.Collections.Generic; using System.Linq; using ...
- POJ 2437 贪心+priority_queue
题意: 思路: 贪心 能不覆盖的就不盖 写得很乱 左闭右开的 temp //By SiriusRen #include <queue> #include <cstdio> #i ...
- J2msi 自己制作的把exe打成安装包简易GUI程序
因为wix是用命令行执行的,操作比较麻烦,所以自己写了个wix生成安装包的图形操作程序, 原理很简单,主要用java 来执行 wix 的heat .candle 和 light 命令 ,最后生成安装文 ...