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可以是变量或者常量.(其实用常量就 ...
随机推荐
- 洛谷P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
题目描述 给出两个n位10进制整数x和y,你需要计算x*y. 输入输出格式 输入格式: 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数为n的正整数y. 输出格式: 输出一 ...
- C# Aspose.Cells 使用汇总
Workbook workbook = new Workbook(); //工作簿 Worksheet sheet = workbook.Worksheets[0]; //工作表 Cells cell ...
- linux和Windows双系统让 Windows 把硬件时间当作 UTC
linux和Windows双系统让 Windows 把硬件时间当作 UTC Windows设置如下:开 始->运行->CMD,打开命令行程序(Vista则要以管理员方式打开命令行程序方可有 ...
- ThinkPad X260 UEFI安装 win7 64位 方法
ThinkPad X260 UEFI安装 win7 64位 方法 1.使用DG重新格式化硬盘,格式为GPT 2.使用CGI 安装 WIM文件 (image不知是否可以,下次测试) 3.改BIOS ...
- 在Docker应用场景下 如何使用新技术快速实现DevOps
在Docker应用场景下 如何使用新技术快速实现DevOps @Container容器技术大会是由国内容器技术社区DockOne组织的专为一线开发者和运维工程师设计的顶级容器技术会议,会议强调实践和交 ...
- 深入浅出WPF 第一部分(3)
3.2.3 属性元素 <Grid HorizontalAlignment="Center" VerticalAlignment="Center"> ...
- 关于cocos2dx之lua使用TableView
在手机游戏的开发中,滚动是一项很重要的操作,而cocos2dx中使用的最广泛的就属于TableView了,只是由于cocos2dx的接口比較晦涩,所以须要一个熟悉的过程.本文主要解说怎样使用Table ...
- POJ 3592 Instantaneous Transference(强连通+DP)
POJ 3592 Instantaneous Transference 题目链接 题意:一个图.能往右和下走,然后有*能够传送到一个位置.'#'不能走.走过一个点能够获得该点上面的数字值,问最大能获得 ...
- PhoneGap/Cordova Android应用签名公布注意事项
今天最终要公布Android HybirdApp了,安装曾经做原生应用的流程公布签名Apk,没想到立即遇到了几个问题.如今把它们的解决的方法整理下来. export signed Apk 遇到以下错误 ...
- kettle(一)概述
近期两个月一直和kettle打交道,从開始的没听说过,到如今能够熟练运用,不得不说项目驱动下,学习东西是最快的.好了,尽管使用kettle应付项目的任务绰绰有余.可是还是想系统的学习一下,总结一下.比 ...