无连接网络通信程序UDP

服务器端

#include <windows.h>
#include <iostream.h>
#include <winsock.h>
#pragma comment(lib,"ws2_32")#define NO_FLAGS_SET 0#define PORT (u_short) 44965
#define MAXBUFLEN 256INT main(VOID)
{WSADATA Data;//它存储 被WSAStartup函数调用后返回的 Windows Sockets数据SOCKADDR_IN serverSockAddr;//服务器地址,他区分地址和端口号SOCKADDR_IN clientSockAddr;//客户端地址SOCKET serverSocket;//服务器套接字SOCKET clientSocket;//客户端套接字int addrLen=sizeof(SOCKADDR_IN);//获得地址长度int status;   //获取WSAStartup返回的整数来判断当前各种状态int numrcv;  //获取接受数据过程是否有异常。char buffer[MAXBUFLEN];//缓冲区/* initialize the Windows Socket DLL */status=WSAStartup(MAKEWORD(1, 1), &Data);//调用库函数并返回结果
/*初始化Winsock DLLif (status != 0)cerr << "ERROR: WSAStartup unsuccessful" << endl;//失败/* zero the sockaddr_in structure *///memset(&serverSockAddr, 0,sizeof(serverSockAddr));/* specify the port portion of the address */serverSockAddr.sin_port=htons(PORT);//将端口从整形转化成网络字节序并赋值给服务器端//口/* specify the address family as Internet */serverSockAddr.sin_family=AF_INET;//表明协议类型是TCP/ip协议serverSockAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");/* specify that the address does not matter */
/*INADDR_ANY 的具体含义是,绑定到0.0.0.0。此时,对所有的地址都将是有效的
serverSockAddr.sin_addr.s_addr=htonl(INADDR_ANY);/* create a socket */serverSocket=socket(AF_INET, SOCK_DGRAM, 0);//创建服务器套接字if (serverSocket == INVALID_SOCKET)cerr << "ERROR: socket unsuccessful" << endl;int len = sizeof(serverSockAddr);   //获取服务器地址长度/* associate the socket with the address */bind(serverSocket, (LPSOCKADDR) &serverSockAddr,len);//将套接字与IP地址绑定/*if (status == SOCKET_ERROR)cerr << "ERROR: bind unsuccessful" << endl; //绑定失败/* allow the socket to take connections *//*status=listen(serverSocket, 1);if (status == SOCKET_ERROR)cerr << "ERROR: listen unsuccessful" << endl; //监听失败/* accept the connection request when one is received *//*clientSocket=accept(serverSocket,(LPSOCKADDR) &clientSockAddr,&addrLen);*///cout << "Got the connection..." << endl;while(1){
numrcv=recvfrom(serverSocket, buffer, MAXBUFLEN, 0,(SOCKADDR*)&clientSockAddr,&len);
//接收从客户端发送过来的数据并返回结果。if ((numrcv == 0) || (numrcv == SOCKET_ERROR)){cout << "Connection terminated." << endl;status=closesocket(clientSocket);if (status == SOCKET_ERROR)cerr << "ERROR: closesocket unsuccessful"<< endl;status=WSACleanup();if (status == SOCKET_ERROR)cerr << "ERROR: WSACleanup unsuccessful" << endl;return(1); }cout << buffer << endl;} /* while */
}

客户端如下:

#include <windows.h>
#include <iostream.h>
#include <winsock.h>
#pragma comment(lib,"ws2_32")#define NO_FLAGS_SET 0#define PORT (u_short) 44965
#define DEST_IP_ADDR "10.86.2.1" //Server addressINT main(VOID)
{WSADATA Data;//它存储 被WSAStartup函数调用后返回的 Windows Sockets数据SOCKADDR_IN destSockAddr;//目的套接字地址,他区分地址和端口号SOCKET client;//客户端套接字int status;//获取WSAStartup返回的整数来判断当前各种状态int numsnt; //获取发送数据过程是否有异常。char *toSendtxt="Test String";/* initialize the Windows Socket DLL */status=WSAStartup(MAKEWORD(1, 1), &Data);//调用外部库函数并返回结果/*if (status != 0)cerr << "ERROR: WSAStartup unsuccessful"//调用失败<< endl;/* convert IP address into in_addr form *///destAddr=inet_addr(DEST_IP_ADDR);/* copy destAddr into sockaddr_in structure *//*memcpy(&destSockAddr.sin_addr,&destAddr, sizeof(destAddr));/* specify the port portion of the address */destSockAddr.sin_port=htons(PORT); //将端口从整形转化成网络字节序并赋值给目的套接//字端/* specify the address family as Internet */destSockAddr.sin_family=AF_INET;//表明协议类型是TCP/IP协议destSockAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//设置服务器端的IP地址int len = sizeof(SOCKADDR_IN);/* create a socket */client=socket(AF_INET, SOCK_DGRAM, 0);//创建一个客户端套接字/*if (destSocket == INVALID_SOCKET){cerr << "ERROR: socket unsuccessful" << endl;//创建失败status=WSACleanup();if (status == SOCKET_ERROR)cerr << "ERROR: WSACleanup unsuccessful" << endl;return(1);}/*cout << "Trying to connect to IP Address: "<< DEST_IP_ADDR << endl;/* connect to the server */while(1){cout << "Sending..." << endl; //控制台输出Sending...numsnt=sendto(client, toSendtxt, strlen(toSendtxt) + 1, NO_FLAGS_SET,(const SOCKADDR*)&destSockAddr,len);//发送数据并获取结果,各参数上面有说明if (numsnt != (int)strlen(toSendtxt) + 1){cout << "Connection terminated" << endl;//连接中断status=closesocket(client);      //关闭套接字if (status == SOCKET_ERROR)cerr << "ERROR: closesocket unsuccessful"//关闭失败<< endl;status=WSACleanup(); //终止调用外部库if (status == SOCKET_ERROR)cerr << "ERROR: WSACleanup unsuccessful"//终止失败<< endl;return(1);}/* Wait before sending the message again */Sleep(4800); //线程睡眠4.8秒 } /* while */
}

小程序制作过程中遇到的问题

做C++socket UDP编程,server端接收的数据不完整,中间参杂十六进制的CDCDCDCD,不知道为何?

解决:

       虽然发送的buffer全是正确的,发送数据的长度也是正确的。接数据的长度不正确,接收的数据不完整,应该是原来数组没有初始化,到时接收数据不完整时,接收数组中就出现了CDCDCDCD。之后我将数组进行初始化赋值一下,问题得到解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中的LEGB 规则

Python 使⽤ LEGB 的顺序来查找⼀个符号对应的对象 locals -> enclosing function -> globals -> builtins 局部变量———闭包空间———全局变量———内建模块 a 1 # 全局变量 globals def fun(): a 2 …

LeetCode 1553. 吃掉 N 个橘子的最少天数(BFS)

文章目录1. 题目2. 解题1. 题目 厨房里总共有 n 个橘子&#xff0c;你决定每一天选择如下方式之一吃这些橘子&#xff1a; 吃掉一个橘子。如果剩余橘子数 n 能被 2 整除&#xff0c;那么你可以吃掉 n/2 个橘子。如果剩余橘子数 n 能被 3 整除&#xff0c;那么你可以吃掉 2*(n…

计算机网络 谢希仁 课后习题部分答案

试说明IP地址与硬件地址的区别&#xff0c;为什么要使用这两种不同的地址&#xff1f; 解&#xff1a; IP地址放在IP数据报的首部&#xff0c;硬件地址则放MAC帧的首部&#xff1b;在网络层和网络层以上使用IP地址&#xff0c;数据链路层及以下使用硬件地址 IP 地址就是给每个…

Mysql 导入导出数据结构及数据

方式一&#xff1a; mysqldump -ukevin -P3306 --default-character-setutf8 -p -h10.1.15.123 activity sign_in_user > user.sql 导出的结果包含建表脚本及数据已INSERT.SQL形式。 导入数据 mysql>use activity; mysql>source user.sql; 方式二&#xff1a; …

Python发送文本邮件

在运行机器学习等需要大量计算的程序时&#xff0c;可以在报错或者程序运行完成时&#xff0c;发送邮件提醒。 参考&#xff1a;Python发送邮件(文本邮件发送) # 运行完&#xff0c;发邮件提醒 # 参考 https://blog.csdn.net/FransicZhang/article/details/83375299 import s…

ARM的UART实验

实验题目&#xff1a;设计一个串口初始化程序 Uart_Init_Ext(int pclk,int baud,int parity,int stop, int len)&#xff0c;要求在Uart_driver.c 和 Uart_driver.h中实现驱动&#xff0c;然后在TARGET.c的Target—_Init(void)中调用 PC端用超级终端验证结果。串口寄存器参考实…

android第一天-------环境搭建

今天正式第一天学习android的。 1.昨晚下班后回家跟同事刘江龙打了四把dota。还好&#xff0c;都赢了把对面虐成狗了。大多都是1300到1450的局&#xff0c;玩的很爽。 2.dota打完后给在湖南常德的女朋友打了个电话&#xff0c;让她早点睡。当然这个电话是我每天都必须打的。 3.…

[Kesci] 预测分析 · 客户购买预测(AUC评估要使用predict_proba)

文章目录1. Baseline2. AUC评估要使用predict_proba2.1 导入工具包2.2 特征提取2.3 训练模型选择2.4 网格/随机搜索 参数提交2.5 测试结果3. 致谢新人赛地址 1. Baseline import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt %ma…

python中装饰器的参数与返回值

def itcast1(fun): def inner(*args, **kwargs): print("itcast1 start") # args -> 元组数据() #kwargs -> 字典数据{} #result用来接收被装饰函数的返回值 result fun(*args, **kwargs) print("itcast1 end") return result return inner itcast1…

键盘接口和七段数码管的控制实验

一、实验目的 1. 学习4X4键盘的与CPU的接口原理 2. 掌握键盘芯片HD7279的使用&#xff0c;及8位数码管的显示方法&#xff1b; 二、实验内容 1. 通过4X4按键完成在数码管上的各种显示功能&#xff0c;以及LCD上显示。 三、实验设备 EL-ARM-830教学实验箱&#xff0c;P…

奇葩的UI引用LayoutInflater.from问题

今收到BUG一枚&#xff0c;一个页面的EditText的风格变为了系统默认&#xff08;系统经过定制&#xff0c;风格和普通的不同&#xff09; 经检查xml无任何不妥&#xff0c;最终问题出在LayoutInflater.from上。 如果LayoutInflater.from&#xff08;XXActivity.this&#xff09…

LeetCode 939. 最小面积矩形(哈希)

文章目录1. 题目2. 解题1. 题目 给定在 xy 平面上的一组点&#xff0c;确定由这些点组成的矩形的最小面积&#xff0c;其中矩形的边平行于 x 轴和 y 轴。 如果没有任何矩形&#xff0c;就返回 0。 示例 1&#xff1a; 输入&#xff1a;[[1,1],[1,3],[3,1],[3,3],[2,2]] 输出…

python中的wraps函数

使⽤装饰器时&#xff0c;有⼀些细节需要被注意。 例如&#xff0c;被装饰后的函数其实已经是另外⼀个函数了&#xff08;函数名等函数属性会发⽣改变&#xff09;。添加后由于函数名和函数的doc发⽣了改变&#xff0c;对测试结果有一定影响&#xff01; import functools de…

python中向类中动态添加新特性及删除属性方法

class Foo(object): pass obj Foo() # 添加对象属性(对象名追加对象属性&#xff09; obj.a 100 # print(obj.a) # 添加类属性&#xff08;类名称追加类属性&#xff09; Foo.b 200 # print(Foo.b) # print(obj.b) # 添加对象方法 def obj_fun(self): print(self.a) # …

图片效果集合(js、jquery或html5)

1.jQuery HTML5 幻灯片使用支持HTML5的浏览器会有特殊效果&#xff0c;即切换图片时颜色的改变文章&#xff1a;http://keleyi.com/a/bjac/b8i3xdui.htm效果&#xff1a;http://keleyi.com/keleyi/phtml/html5/1.htm 2. jQuery图片延迟加载一开始不加载实图&#xff0c;只用灰图…

LeetCode 1131. 绝对值表达式的最大值(数学 绝对值展开)

文章目录1. 题目2. 解题1. 题目 给你两个长度相等的整数数组&#xff0c;返回下面表达式的最大值&#xff1a; |arr1[i] - arr1[j]| |arr2[i] - arr2[j]| |i - j|其中下标 i&#xff0c;j 满足 0 < i, j < arr1.length。 示例 1&#xff1a; 输入&#xff1a;arr1 …

基于uCOSII的LCD驱动实验

实验目的 掌握在 UCOsH操作系统下编写应用程序 的基本方法 实验内容 在移植好的UCOsII项 目中添加串口、LCD、 键盘的驱动程序 学习在UCOSII下 ,多应用任务的简单编程实例 实验设备 EL-RAM-860教 学 实验 箱 ,PentiumII以上 的 PC机 ,仿 真 调试 电缆 ,串 口直 连 电 缆 。 PC操…

python中的__slots__

为了达到限制的⽬的&#xff0c;Python允许在定义class的时候&#xff0c;定义一个特殊的 __slots__变量&#xff0c;来限制该class实例能添加的属性&#xff1a; class Foo(object): __slots__ ("a", "b") # 限制动态使用对象名添加东西&#xff08;属性…