UDP_Client

C# UDPClient类(通过UdpClient类实现局域网UDP通讯) 1、UDP(User Data Protocol,用户数据报协议) (1) UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。 (2) 由于传输数据 阅读详情

UDP_Client

服务端与客户端的区别

服务端是先接收数据,数据有来的地址,需要告诉操作系统,进程使用哪个端口号,数据才能到达指定的端口。

先发送一个消息,才会有来源的端口号。源端口号和目的端口号必须不一样。

客户端不绑定端口号发送数据包,操作系统会在第一次发送消息的时候给客户端分配一个端口号,直到socket关闭。

如果能保证客户端每次都是先发送数据,可以不绑定端口号,如果有服务端先发送数据的情况,需要给客户端绑定一个端口号,以明确,发送端需要发往的地址。

代码书写

#include<iostream>
 #include<Winsock2.h>
 
 #pragma comment(lib,"Ws2_32.lib")
 using namespace std;
 
 int main() {
     //加载库
     WORD version = MAKEWORD(2, 2);
     WSADATA data;
     int err = WSAStartup(version,&data);
     if (0 != err) {
         cout << "WSAStartup error" << endl;
         return 1;
     }
     if (HIBYTE(data.wVersion) != 2 || LOBYTE(data.wVersion) != 2) {
         cout << "verion wrong!" << endl;
         WSACleanup();
         return 1;
     }
     else {
         cout << "WSAStartup success"<<endl;
     }
     //创建套接字
     SOCKET sock = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
     if (INVALID_SOCKET == sock) {
         cout << "socket error" << WSAGetLastError()<<endl;
         WSACleanup();
         return 1;
     }
     else {
         cout << "socket success" << endl;
     }
     //填写地址
     char sendBUf[9999] = "";
     char recvBuf[9999] = "";
     int sendLen = sizeof(sendBUf);
     int recvLen = sizeof(recvBuf);
     sockaddr_in addrTo;
     int addrToLen = sizeof(addrTo);
     addrTo.sin_addr.S_un.S_addr = inet_addr(" 192.168.0.111");
     addrTo.sin_family = AF_INET;
     addrTo.sin_port = htons(78910);//要发送给的进程的IP地址,端口号
     while (true) {
         //发送数据
         gets_s(sendBUf);
         int senNum = sendto(sock,sendBUf,sendLen,0,(sockaddr*) & addrTo,sizeof(addrTo));
         if (SOCKET_ERROR == senNum) {
             cout << "send error" << GetLastError() << endl;
             break;
         }
         //接收数据
         int recvNum = recvfrom(sock,recvBuf,recvLen,0,nullptr,nullptr);
         //int recvNum = recvfrom(sock,recvBuf,recvLen,0,(sockaddr*)&addrTo,&addrToLen);
         //后面两个输出参数可以不接(nullptr),发送接收方指定,不需要返回发送方的地址
         if (0 < recvNum || 0 == recvNum) {
             cout << "recv error" << GetLastError() << endl;
             break;
         }
         cout << "server say:" << recvBuf << endl;
     }
     //关闭套接字
     closesocket(sock);
     //卸载库
     WSACleanup();
 }

运行结果

先运行客户端,后运行服务端。

启动

发送消息

尝试发送出错

  • 错误查找
  • 尝试解决1.更换端口号->不能解决2.优快云搜索

  • 错误总结:客户端socket部分出现问题
  • 检查代码填写地址时有空格导致发送失败

纠错

  • 运行结果
  • 1.server没有输入要发送的数据
  • 2.client客户端判断接收是否错误的条件错误。
    • 修改
  • 运行结果

完整代码

#include<iostream>
 #include<Winsock2.h>
 
 #pragma comment(lib,"Ws2_32.lib")
 using namespace std;
 
 int main() {
     //加载库
     WORD version = MAKEWORD(2, 2);
     WSADATA data;
     int err = WSAStartup(version,&data);
     if (0 != err) {
         cout << "WSAStartup error" << endl;
         return 1;
     }
     if (HIBYTE(data.wVersion) != 2 || LOBYTE(data.wVersion) != 2) {
         cout << "verion wrong!" << endl;
         WSACleanup();
         return 1;
     }
     else {
         cout << "WSAStartup success"<<endl;
     }
     //创建套接字
     SOCKET sock = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
     if (INVALID_SOCKET == sock) {
         cout << "socket error" << WSAGetLastError()<<endl;
         WSACleanup();
         return 1;
     }
     else {
         cout << "socket success" << endl;
     }
     //填写地址
     char sendBUf[9999] = "";
     char recvBuf[9999] = "";
     int sendLen = sizeof(sendBUf);
     int recvLen = sizeof(recvBuf);
     sockaddr_in addrTo;
     int addrToLen = sizeof(addrTo);
     addrTo.sin_addr.S_un.S_addr = inet_addr("192.168.0.111");
     addrTo.sin_family = AF_INET;
     addrTo.sin_port = htons(56789);
     while (true) {
         //发送数据
         gets_s(sendBUf);
         int senNum = sendto(sock,sendBUf,sendLen,0,(sockaddr*) & addrTo,sizeof(addrTo));
         if (SOCKET_ERROR == senNum) {
             cout << "send error" << GetLastError() << endl;
             break;
         }
         //接收数据
         //int recvNum = recvfrom(sock,recvBuf,recvLen,0,(sockaddr*)&addrTo,&addrToLen);
         int recvNum = recvfrom(sock, recvBuf, recvLen, 0,nullptr,nullptr);
         if (recvNum<0) {
             cout << "recv error" << GetLastError() << endl;
             break;
         }
         cout << "server say:" << recvBuf << endl;
     }
     //关闭套接字
     closesocket(sock);
     //卸载库
     WSACleanup();
 }

运行结果

UDP协议——使用UDPClient实现通信 在C#中,使用UdpClient进行UDP通信时,可以实现基本的发送和接收数据包的功能。 阅读详情

相关推荐

swoole深入学习 3. upd Server和udp Client

swoole深入学习 3. upd Server和udp Client标签(空格分隔): swoole前面主要讲了tcp得server和client的业务处理,tcp有三次握手,有连接的概览,而UDP服务器与TCP服务器不同,UDP没有连接的概念。启动Server后,客户端无需Connect,直接可以向Server监听的端口发送数据包。server 接受数据的事件为onPacket, 发送给clie

domorejojo 3783

C#网络编程UDP程序设计(UdpClient类)

UDP是user datagram protocol的简称,中文名是用户数据报协议,它是网络信息传输的另一种形式。UDP通信和TCP通信不同,基于UDP的信息传递更快,但不提供可靠的保证。使用UDP传递数据时,用户无法知道数据能否正确地到达主机,也不能确定到达目的地的顺序是否和发送的顺序相同。虽然UDP是一种不可靠的协议,但如果需要较快地传输信息,并能容忍小的错误,可以考虑使用UDP。基于UDP通信的基本模式如下在C#中,UdpClient类用于在阻止同步模式下发送和接收UDP数据报。

wenchm的博客 6053

C# Udp通信从入门到精通—— UdpClient类使用总结

UDP Client类的使用

qq_34059233的博客 2135

UDP server 和UDP client说明

UDP client ,是指模块通电后监听设置的端口,不主动建立链接,当串口设备向模块串口发送数据时,串口服务器 将数据发送到设定的目标IP和端口上,PC端可以将目标IP和端口设置为模块的自身IP模块的自身端口,然后PC端发送数据,可以将数据发送到模块的串口端。在此模式下,模块默认记录一个目标IP,当串口有数据时,向记录的IP发送数据,同时,模块处于服务器的地位,接收网络中发给模块的数据包,并随时调整目标IP为数据来源的IP,适合于多个IP对应模块的工作方式。

Random南荞的博客 2465

【CANoe示例分析】TCP/UDP Server/Client

以下示例来自CANoe DEMO,路径为C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 12.0.101\IO_HIL\TCP_IP Server TCP 由于TCP连接是服务器的tcp socket在listen状态下接受连接请求,从而完成三次握手操作 所以,首先服务器应该先创建好tcp socket后,绑定本地端口,然后处于监听状态,这样才能随时接受客户端的连接请求 CANoe DEMO里关于TCP连接通信是在面板上完成的 .

jasonj333 5083

Linux 音频驱动(六) ALSA音频驱动之PCM Write数据传递过程

目录1. 前言2. PCM Data Flow3. 总结 1. 前言 本文,我们将以回放(Playback,播放音频)为例,讲解PCM Data是如何从用户空间到内核空间,最后传递到Codec。 在Linux 音频驱动(一) ASoC音频框架简介中,我们给出了回放(Playback)PCM数据流示意图: 对于Linux来说,由于分为 user space 和kernel space,而且两者之间不能随便互相访问。因此用户如果播放音频,则需要调用copy_from_user()将用户数据从user spa

_Modest_的博客 1万+

udp 简单server和client

server.cpp #include <sys/types.h> #include <sys/socket.h> #include <pthread.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib..

m0_37981386的博客 1854

ADS2020与SystemVue2020Update1.0同机安装避坑指南:解决License冲突,实现EVM联合仿真

本文详细介绍了ADS2020与SystemVue2020 Update1.0同机安装的完整解决方案,重点解决License冲突问题,实现EVM联合仿真。通过合理的安装顺序、路径规划和License服务配置,确保两款EDA工具和谐共存,为射频与微波电路设计提供高效仿真环境。

weixin_30271335的博客 347

Python UDP Server Client

Python 一个简单udp 的server 与 Client 例子,需要server 先启动,client 后启动. # -*- coding: cp936 udp Server 先启动 -*- zdt import socket,time import random Lport = 8013 Rport = 8012 host = "localhost" s = socket.

最开心的就是>>种豆得豆,种瓜的瓜>> 952

STM32CUBEMX 使用教程5 — DMA配置 & 串口结合DMA实现数据搬运

DMA(Direct Memory Access),直接存储器访问(或数据搬运),是STM32中很实用的一个外设。DMA 传输数据方式不需要 CPU 参与控制传输,也不用中断处理的方式进行数据搬运处理,纯粹通过硬件为 RAM 与 I/O 设备之间开辟一条直接传送数据的通路,使 CPU 的效率大大提高。

weixin_43866583的博客 1499

多标签损失之Hamming Loss(PyTorch和sklearn)、Focal Loss、交叉熵和ASL损失

多标签损失

wuli_xin的博客 4461

UDP Server/Client

UDP是无连接,不可靠的传输。但是怎么又会有Server/Client的说法呢?请看红色字体的解释。 UDP Server程序 编写程序 (1)使用socket()来建立一个UDP socket,第二个参数为SOCK_DGRAM。 (2)初始化sockaddr_in结构的变量,并赋值。sockaddr_in结构定义: struct sockaddr_in {

$firecat利白的代码足迹$ 2954

Landsat9 地表温度反演方法

landsat9地表温度反演及缺失值处理方法

xiangliu12345的博客 3917

UDP基础server与client

1、基础功能 1、server端 import socket sk = socket.socket(type=socket.SOCK_DGRAM) # 建立一个socket对象, # 指定以UDP协议的形式来连接 sk.bind(('127.0.0.1',8080)) # 指定服务的地址 msg,addr = sk.recvfrom(1024) # msg为接收到的消息,a...

weixin_30896825的博客 886

AEB(自动紧急制动)

AEB系统对静止物体的误判率受多种因素影响,包括传感器精度、算法复杂性以及环境条件等。通过多传感器融合、算法优化、硬件升级以及环境适应性增强等技术手段,可以有效减少误判问题。美国和欧洲的AEB法规均强调了技术性能和安全性,但具体要求有所不同。美国的NHTSA规定更注重高速和复杂场景下的紧急制动能力,而欧盟的ECE R152法规则更侧重于基础的AEB功能覆盖范围。

百态·数智思维 | 聚焦大数据、量化与未来AI 2550

74、刀具磨损监测与寿命预测分析

本文综述了刀具磨损监测与寿命预测的研究现状,分析了力信号、功率信号、振动信号和声发射信号在刀具状态监测中的应用及其优缺点。介绍了当前常用的刀具寿命模型及故障诊断流程,并总结了基于不同信号的监测方法。文章指出,尽管已有多种方法在理论上取得进展,但在实际应用中仍面临挑战。未来研究方向包括采用更先进的神经网络、深入探索多信号融合技术以及有效利用工业大数据,以提升刀具状态识别的准确性与可靠性。

lstm7chronicler的博客 275

编写Linux下的UDP Client/Server程序

一、引言 UDP是TCP/IP协议中的传输层协议的一种,本文介绍了在Linux下编写基于UDP协议的Client/Server模型的程序的方法,并给出了一个echo Client/Server例子程序。二、UDP协议简介 UDP是一种简单的传输层协议,在RFC768中有详细描述。UDP协议是一种非连接的、不可靠的数据报文协议,完全不同于提供面向连接的、可靠的字节流的TCP协议。虽然UDP有很多不足

lwm1986的专栏 1343

土壤数据库辅助工具SPAW计算土壤导水率

首先点击打开根据之前的1比100土壤数据查表得到各个组分含量其中Field Capacity是田间持水量Matric Bulk Density是基质粒密度。

所有专家都曾始于新手 3443

基于UDP的socket例程-udp_client.c

/******************************************************************************************* 程序说明: 运行程序时,附加参数:服务器的IP地址 ***********************************************************...

wanzhilin88的专栏 440

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

TCP/UDP Socket调试工具提供了TCP Server,TCP Client,UDP Server,UDP Client,UDP Group 五种Socket调试方案。...

一、TCP通信测试: 1) 创建TCP Server:      选中左方的TCP Server, 然后点击”创建”按钮,软件弹出监听端口输入框      输入监听端口后,即创建了一个在指定端口上进行监听的TCP Server Socket。TCP Server Socket创建时,软件会自动启动TCP Server Socket处于监听状态:      创建TCP Client...

weixin_30781631的博客 603

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

UDP Server、UDP Client 和 UDP Broadcast 简介

UDP 是一种面向无连接的协议,适合于低延迟、高性能的网络通信。相比 TCP,UDP 的特点是速度快但不保证可靠性,常用于实时传输场景(如视频、音频、广播)。UDP 广播是一种特殊的 UDP 通信方式,可以向一个子网内的所有设备发送消息。UDP Server 是被动接收数据的角色,通常用于接收来自 UDP Client 的请求。UDP 适合低延迟场景,但需要根据应用需求补充可靠性机制(如超时重传、序列号等)。UDP Client 主动向 Server 发送数据,通常用于发送请求或消息。

m0_63482948的博客 1633

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

UDP server client 应用示例

1.serverexit(1);if (n < 0)if (n < 0)break;return 0;2.clientexit(0);if (n < 0)if (n < 0)break;return 0;3.编译4.运行./server。

qq_47674991的博客 417

TCP和UDP的Client-Server交互流程

1.TCP Client-Server交互流程 2.UDP Client-Server交互流程 注:图片来源(https://www.cs.dartmouth.edu/~campbell/cs60/socketprogramming.html#x1-100013)。 3.一个形象的比喻 建立TCP连接就像是一个电话系统。 socket():你有了一部手机。 bind():激活SIM卡...

C君传 3791
上一篇: UDP_Server
下一篇: 3-IM聊天系统-Mediator
小姨火辣辣
博客等级 码龄4年 38粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值