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可以是变量或者常量.(其实用常量就 ...
随机推荐
- Zuul 2 : The Netflix Journey to Asynchronous, Non-Blocking Systems--转
原文地址:http://techblog.netflix.com/2016/09/zuul-2-netflix-journey-to-asynchronous.html We recently mad ...
- Linux常用系统管理软件
1.BleachBit是一款开源的系统清理工具,它可以释放磁盘空间,保护您的隐私,清除缓存,删除cookies.internet历史.临时文件.日志和丢弃的垃圾文件等,支持清除应用的残留数据,切碎文件 ...
- Ubuntu Bonding(16.04网卡绑定)
UbuntuBonding(网卡绑定) 绑定,也称为端口聚合或链路聚合,意味着将多个网络接口(NIC)组合到单个链路,从而提供高可用性,负载平衡,最大吞吐量或这些组合.注意bonding只能提供链路监 ...
- 使用sh库执行shell命令
python中执行shell命令 之前执行shell命令多是通过os.system(shell命令)的方式来执行,比较麻烦. 了解到sh是一个比subprocess好的库,能够执行shell命令 1. ...
- Flask--Python中常用的Web框架之一
Web框架 什么是框架? 协助开发者快速开发web应程序的一套功能代码 开发者只需要按照框架约定要求,在指定位置写上自己的业务逻辑代码即可 为什么要用web框架? 使用web框架的主要目的就是避免重复 ...
- jQuery判断字符串是否含有中文字符
//判断字符串是不是中文String.prototype.isChinese = function () { var reg = /[^\x00-\xff]/ig;//判断是否存在中文和全角字符 ...
- 【Uva 1630】Folding
[Link]: [Description] 你能对字符串进行压缩的操作; 即把连续出现的相同的子串改成它出现的次数+这个最基本的字符串的形式; 问你这个字符串最短能被压缩得多短; [Solution] ...
- C++ 不输入回车就不结束输入的实现方法
方法一 char mystr[128]; mystr[0] = '\0'; char c = getchar(); int i=0; while(c!='\n') { mystr[i] = c; c ...
- 【Cocos游戏实战】功夫小子第五课之帮助场景和选关功能的实现
功夫小子之帮助场景和选关功能的实现 转载请注明出处:http://blog.csdn.net/suool/article/details/46661231 本节课的视频教程地址是: hmsr=teac ...
- [欧拉回路] poj 1386 Play on Words
题目链接: http://poj.org/problem?id=1386 Play on Words Time Limit: 1000MS Memory Limit: 10000K Total S ...