96.udp通信
运行截图

客户端
- 创建客户端套接字,用于创建UDP通信
SOCKET socket_client;
- 创建UDP通信
socket_client = socket(AF_INET, SOCK_DGRAM, );
- 创建客户端结构体保存ip地址以及端口号
SOCKADDR_IN sever;
- 设置通信模式,通信地址以及通信端口
//设置通信模式
sever.sin_family = AF_INET;
//设置通信地址
sever.sin_addr.S_un.S_addr = inet_addr("192.168.0.104");
//开启通信端口
sever.sin_port = htons(); - 创建字符串用于发送信息
//存储获取的字符串
char strreceive[] = { };
//获取的字符串长度
int length; - 获取字符串并通过套接字发送到相应的ip地址
//不断进行数据交换
while ()
{
char str[] = { };
fgets(str, , stdin);
//通过套接字发送信息到服务器
sendto(socket_client, str, strlen(str) + , , &sever, sizeof(SOCKADDR));
} - 套接字检测版本信息
//UDP版本,2,2版本
WORD wversion=MAKEWORD(,);
//当前版本
WSADATA wsadata;
//获取版本对比,开始通信
int error = WSAStartup(wversion, &wsadata); //如果版本与指定的不对则返回
if (error!=)
{
printf("error");
return;
} //取出低八位与高八位进行版本对比
if (LOBYTE(wsadata.wVersion) != || HIBYTE(wsadata.wVersion) != )
{
printf(" version error");
return;
} - 关闭套接字
//关闭
closesocket(socket_client);
//关闭
WSACleanup();
客户端完整代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
//网络通信
#include<winsock.h>
#pragma comment(lib,"ws2_32.lib") void main()
{
//存储获取的字符串
char strreceive[] = { };
//获取的字符串长度
int length;
//客户端的套接字,用于创建UDP通信
SOCKET socket_client;
//创建客户端结构体保存ip地址以及端口号
SOCKADDR_IN sever;
SOCKADDR_IN severTmp; //UDP版本,2,2版本
WORD wversion=MAKEWORD(,);
//当前版本
WSADATA wsadata;
//获取版本对比,开始通信
int error = WSAStartup(wversion, &wsadata); //如果版本与指定的不对则返回
if (error!=)
{
printf("error");
return;
} //取出低八位与高八位进行版本对比
if (LOBYTE(wsadata.wVersion) != || HIBYTE(wsadata.wVersion) != )
{
printf(" version error");
return;
}
//创建UDP通信
socket_client = socket(AF_INET, SOCK_DGRAM, ); //设置通信模式
sever.sin_family = AF_INET;
//设置通信地址
sever.sin_addr.S_un.S_addr = inet_addr("192.168.0.104");
//开启通信端口
sever.sin_port = htons(); //打开文件
FILE *pfr = fopen("1.txt", "rb");
//不断进行数据交换
while ()
{
char str[] = { };
fgets(str, , stdin);
//通过套接字发送信息到服务器
sendto(socket_client, str, strlen(str) + , , &sever, sizeof(SOCKADDR)); } //关闭
closesocket(socket_client);
//关闭
WSACleanup(); system("pause");
}
服务器端
- 创建服务器端套接字,用于创建UDP通信
//服务器套接字,创建UDP通信
SOCKET socket_send; - 创建UDP通信
socket_send = socket(AF_INET, SOCK_DGRAM, );
- 创建服务器端结构体保存ip地址以及端口号
SOCKADDR_IN server;
- 设置通信模式,通信地址以及通信端口
//设置通信方式
server.sin_family = AF_INET;
//获取本地ip信息
server.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
server.sin_port = htons();//端口 - 把服务器的ip信息和端口信息与服务器套接字绑定,接收该地址收到的内容
bind(socket_send, &server, sizeof(SOCKADDR));
- 保存是谁发来的信息的ip
SOCKADDR_IN client;
- 创建字符串用于接收
//存储获取的字符串
char strreceive[] = { };
//存储获取的长度
int length; - 通过套接字获取
//获取长度
length = sizeof(SOCKADDR);
while ()
{
//通过服务器套接字接受信息
recvfrom(socket_send, strreceive, , , &client, &length);
if (strlen(strreceive) > )
{
printf("收到%s\n", strreceive);
printf("%d\n", client.sin_addr.S_un.S_addr);
memset(strreceive, , );
}
} - 版本检测
//版本,2,2版本
WORD wversion = MAKEWORD(, );
//当前版本
WSADATA wsadata;
//获取版本对比,开始通信
int error = WSAStartup(wversion, &wsadata); //如果版本与指定的不对则返回
if (error != )
{
printf("error");
return;
} //取出低八位,高八位,对比版本
if (LOBYTE(wsadata.wVersion) != || HIBYTE(wsadata.wVersion) != )
{
printf(" version error");
return;
} - 关闭
closesocket(socket_send);//关闭
WSACleanup();
完整代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
//网络通信
#include<winsock.h>
#pragma comment(lib,"ws2_32.lib") void main()
{
//存储获取的字符串
char strreceive[] = { };
//存储获取的长度
int length;
//服务器套接字,创建UDP通信
SOCKET socket_send;
//创建服务器端结构体保存ip地址以及端口号
SOCKADDR_IN server;
//保存是谁发来的信息的ip
SOCKADDR_IN client; //版本,2,2版本
WORD wversion = MAKEWORD(, );
//当前版本
WSADATA wsadata;
//获取版本对比,开始通信
int error = WSAStartup(wversion, &wsadata); //如果版本与指定的不对则返回
if (error != )
{
printf("error");
return;
} //取出低八位,高八位,对比版本
if (LOBYTE(wsadata.wVersion) != || HIBYTE(wsadata.wVersion) != )
{
printf(" version error");
return;
} //创建UDP通信
socket_send = socket(AF_INET, SOCK_DGRAM, ); //设置通信方式
server.sin_family = AF_INET;
//获取本地ip信息
server.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
server.sin_port = htons();//端口 //把服务器的ip信息和端口信息与服务器套接字绑定
bind(socket_send, &server, sizeof(SOCKADDR));
//获取长度
length = sizeof(SOCKADDR);
while ()
{
//通过服务器套接字接受信息
recvfrom(socket_send, strreceive, , , &client, &length);
if (strlen(strreceive) > )
{
printf("收到%s\n", strreceive);
printf("%d\n", client.sin_addr.S_un.S_addr);
memset(strreceive, , );
}
} closesocket(socket_send);//关闭
WSACleanup(); system("pause"); }
96.udp通信的更多相关文章
- vector(可变数组) 用于UDP通信
头文件: #include<vector.h> 然后,声明并初始化vctor数组. vector<char> str(len); 其中len可以是变量或者常量.(其实用常量就 ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.3
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.2
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.1
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.4.1
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 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组件:其目标是提供高性能.通用性.简易性.可扩展.可定制: 鉴于此,其仅实现基本的通用框架通信.数据收发功 ...
- .Net开发笔记(十四) 基于“泵”的UDP通信(接上篇)
上一篇中说到了“泵”在编程中的作用以及一些具体用处,但没有实际demo,可能不好理解,这篇文章我分享一个UDP通信的demo,大概实现了类似“飞鸽传书”在局域网中文本消息和文件传输的功能.功能不全也不 ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.2.3
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
随机推荐
- JAVA线程队列BlockingQueue
JAVA线程队列BlockingQueue 介绍 BlockingQueue阻塞队列,顾名思义,首先它是一个队列,通过一个共享的队列,可以使得数据由队列的一端输入,从另外一端输出. 常用的队列主要有以 ...
- Java 开发 2.0: 现实世界中的 Redis
原文地址:http://www.ibm.com/developerworks/cn/java/j-javadev2-22/ 之前,我已在本系列中讨论过 NoSQL 的概念,也介绍了一些与 Java 平 ...
- java.util.logging.FileHandler
java.util.logging.FileHandler java自带的日志功能,FileHandler可以写日志到文件系统,并且自己维护日志的增删,比c++不知道强多少 FileHandler(f ...
- python pdb小结
Debug功能对于developer是非常重要的,python提供了相应的模块pdb让你可以在用文本编辑器写脚本的情况下进行debug. pdb是python debugger的简称.常用的一些命令如 ...
- 学习推荐《零起点Python大数据与量化交易》中文PDF+源代码
学习量化交易推荐学习国内关于Python大数据与量化交易的原创图书<零起点Python大数据与量化交易>. 配合zwPython开发平台和zwQuant开源量化软件学习,是一套完整的大数据 ...
- 推荐《机器学习实战:基于Scikit-Learn和TensorFlow》高清中英文PDF+源代码
探索机器学习,使用Scikit-Learn全程跟踪一个机器学习项目的例子:探索各种训练模型:使用TensorFlow库构建和训练神经网络,深入神经网络架构,包括卷积神经网络.循环神经网络和深度强化学习 ...
- SSH—指定登录的IP
设置ssh安全--指定的IP登陆 为了服务器更加具有安全性,我们可以设置ssh安全只允许用户从固定的IP进行登陆, 首先获取要登录服务器的电脑的IP地址 登录http://www.ip138.com/ ...
- LRJ入门经典-0903切蛋糕305
原题 LRJ入门经典-0903切蛋糕305 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 如图所示有一个矩形蛋糕,上面划分成 ...
- 參考mudo logging写的win下logging
#pragma once #include <boost/noncopyable.hpp> #include <boost/scoped_ptr.hpp> #include & ...
- jQuery Easy UI ProgressBar(进度条)组件
ProgressBar(进度条)组件,这个还是挺好玩的.我们在自己做点什么的时候常常能用到,比方上传下载文件.导入导出文档啊.加载网页等等. 应用场景非常多,使用起来还非常easy. 演示样例: &l ...