效果演示在下一文中(客户端编写)


文章目录

  • TCP、UDP的区别
  • 服务端API介绍
  • 服务端源码(超详细)

TCP、UDP的区别

UDP是面向无连接,也就是说当实现一个服务端对应多个客户端,不需要向TCPSocket那样使用多线程技术
UDP可以同时多个客户端对服务端传输数据


服务端API介绍

  • SOCK_DGRAM:使用数据报套接字
  • bind:绑定地址(ip、端口)
  • sendto/recvfrom:发送数据 / 接收数据
  • close:释放套接字

服务端编写思路顺序与上面api顺序相同
UDPSocket 是不需要监听和接收的,绑定后直接收发数据


服务端源码(超详细)

老样子,代码我都会加以详细的注释(不用感谢,亲~)

#pragma comment(lib, "ws2_32.lib") // 需要包含的链接库#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h> // 2.2版本void main(void)
{WSADATA        wsaData;        // 用于初始启动信息(初始化套接字)SOCKET     ReceivingSocket;    // 服务端的套接字SOCKADDR_IN       ReceiverAddr;       // 服务端的地址SOCKADDR_IN        SenderAddr;     // 客户端的地址int            SenderAddSize = sizeof(SOCKADDR);  // 保存地址大小 int           Ret;            // 用于判断 int         Port = 5150;       // 端口号(自定义)SenderAddrSize = sizeof(SOCKADDR);        // 赋值(地址大小)// 初始化套接字(版本号等),并判断是否成功if((Ret = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0){printf("Error: WSAStartup failed with error %d\n", Ret);return;}else // 初始化成功之后,判断是不是我们需要的 2.2 版本{// 判断低位和高位是不是都是 2if(LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2){printf("Error: not winsock 2.2\n"); WSACleanup();   // 清空启动信息return;}}// 创建套接字if((ReceivingSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET){printf("Error: socket failed with error %d\n", WSAGetLastError());WSACleanup();return;}// 初始化地址信息ReceiverAddr.sin_family = AF_INET;ReceiverAddr.sin_port = htons(Port);  // 转换成网络字节ReceiverAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);  // 本机的所有ip,都可以连接if(bind(ReceivingSocket, (SOCKADDR*)&ReceiverAddr, sizeof(ReceiverAddr)) == SOCKET_ERROR){printf("Error: bind failed with error %d\n", WSAGetLastError());closesocket(ReceivingSocket);WSACleanup();return;}// 开始收发数据while(1){char buffer[1024] = '\0';   // 接受数据发送数据需要的数组printf("waiting for message from others ... \n");// 接收数据if((Ret = recvfrom(ReceivingSocket, buffer, sizeof(buffer), 0,(SOCKADDR*)&SenderAddr, &SenderAddrSize)) == SOCKET_ERROR){printf("Error: recvfrom failed with error %d\n", WSAGetLastError());closesocket(ReceivingSocket);WSACleanup();return;}else  // 我们将接收到的数据,发送客户端{printf("Received datagram from %s -- %s\n", inet_ntoa(SenderAddr.sin_addr), buffer);// 发送数据sendto(ReceivingSocket, buffer, sizeof(buffer), 0, (SOCKADDR*)&SenderAddr, SenderAddrSize);}Sleep(500);  // 有个缓冲的时间}closesocket(ReceivingSocket);    // 释放套接字WSACleanup();           // 清空启动信息system("pause");
}

客户端链接:

(二)UDPSocket 客户端编写(超详细)


  • 作者:浪子花梦
  • Time:2020.02.16
  • 三人行,必有我师

(一)UDPSocket 服务端编写(超详细)相关推荐

  1. 武道世界java一键端_神鬼世界MC完整一键端架设超详细教程(新手向).docx

    神鬼世界MC完整一键端架设超详细教程(新手向) 神鬼世界完整一键端架设详细教程 By 独霸╰つlwt℡ 最近兽医老大放出了可存储信息的神鬼世界完整一键端,在群里也是倍受欢迎,但有很多人安装过程出现了这 ...

  2. 《零基础看得懂的C语言入门教程 》——(十三)socket服务端编写

    一.学习目标 了解C语言的socket的概念 了解C语言socket的使用方法 完成C语言socket服务端 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言. 第一篇:(一)脱离学习 ...

  3. Python 服务端编写

    这里写自定义目录标题 Python 服务端步骤以及代码 效果以及实现的功能 了解TCP的内部工作过程 首先编写简单UI界面 转换成PY文件(就是界面文件) TCP 服务端初始化(即Socket初始化) ...

  4. python如何写app服务器端_app 服务端编写(2),python

    989868A2-723E-41F2-9A47-9E413C25F7C5.png 前一篇说道爬虫,数据爬到了自然要和数据库连接还有存储,这里我在学习爬虫的时候以为get到了一个新名称,分布式爬虫,还没 ...

  5. mysql服务端下载安装详细教程

    本地安装mysql服务端详细教程 下载地址:https://dev.mysql.com/downloads/mysql/ 下载成功后解压在本地,解压后内容如下 配置环境变量,高级系统设置–>系统 ...

  6. 传奇服务器都有哪些文件,传奇服务端目录文件详细说明

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 当我们下载1个传奇服务端的时候.主文件包是mirserver,那么我来给大家详细说下,这个文件包里面的全部文件夹的作用. MirServer(传奇服务端) ...

  7. php中soap使用,SoapServer服务端编写,SoapClient客户端编写

    以前没接触过soap,最近要弄了,花了一天时间整理,学习了一下,转载请注明http://blog.csdn.net/nanshan_hzq/article/details/52814622 一,首先要 ...

  8. linux下frp客户端服务端部署(超详细)

    实际需求:实时远程项目现场的arm工控机的ssh以及应用的web页面 现场环境:arm工控机可以通过4g路由器上网,但是使用普通流量卡没有公网IP,无法直接通过公网IP来访问设备的ssh以及web服务 ...

  9. 传奇列表放在服务器哪个文件夹,传奇服务端目录文件详细说明

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 当我们下载1个传奇服务端的时候.主文件包是mirserver,那么我来给大家详细说下,这个文件包里面的全部文件夹的作用. MirServer(传奇服务端) ...

  10. 【网单服务端】超神传盛唐仙神妖魔混战超神传单机网单+视频教程+GM工具

    超神传是自由网络独家代理运营的一款以中国古代神话题材为背景的2.5D即时战斗制网络游戏.一款古风画面的2.5D高操作战斗网游.游戏以<封神>.<西游>等中国传统神话为蓝本,用雄 ...

最新文章

  1. LeetCode Integer to Roman(数字转罗马)
  2. python 输出字符串编码_Python print 字符串编码问题
  3. 浅谈腾讯微博与新浪微博的优劣
  4. 手机拍照显示_最值得购买的4款5G手机,每款都有一技之长,有你在用的吗?
  5. [vue] vue组件里写的原生addEventListeners监听事件,要手动去销毁吗?为什么?
  6. P标签如何取消上下间隔
  7. SpringCloud学习笔记026---SpringBoot中使用不同类型的数据库_MySql_PostGreSql_使用template
  8. QTP统计页面加载时间
  9. 乱码ictclas java_中科院分词系统(NLPIR)JAVA简易教程
  10. stm32串口传输数据第一个数据被吞_STM32串口发送第一个字符丢失解决之道
  11. 操作系统课程设计之二级文件系统演示
  12. 周根项《一分钟速算》全集播放amp;下载地址
  13. 温度及pH敏感性聚乙烯醇/羧甲基壳聚糖水凝胶/金银花多糖/薄荷多糖/O-羧甲基壳聚糖水凝胶
  14. C++类学习---------step1
  15. Java:使用POI实现word的docx文件的模板功能
  16. Visual Studio 2017安装使用方法
  17. 计算机组成原理实验主存储器,计算机组成原理实验课件--存储器.ppt
  18. Discuz更改帖子标题的字符长度限制
  19. 传统业务上云:跨AZ容灾架构解析
  20. 布隆过滤器速度_布隆过滤器,你也可以处理十几亿的大数据

热门文章

  1. 简要复习模拟电子技术_基本元器件介绍
  2. 【转载】google搜索从入门到精通
  3. 数据库系统之NoSQL数据库系统
  4. NTKO打开服务器上的文件
  5. 大数据之 Hadoop 基本概念
  6. Mac M1安装配置OpenCV教程
  7. NFine框架因新增页面而显示无法链接资源
  8. MATLAB通信系统建模
  9. 小米3g刷高格固件_不走弯路:小米路由器3G 刷Padavan固件简单教程
  10. QT学习之路:从入门到精通