热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c/c++开发分享c中的udp聊天服务器

我想用c语言编写udp聊天服务器。我以前写过tcp聊天服务器,没关系。在tcp服务器中,accept函数返回一个fd号,服务器根据这个fd号与特定客户端通信。但是在udp中,我怎么

我想用c语言编写udp聊天服务器。 我以前写过tcp聊天服务器,没关系。

在tcp服务器中,accept函数返回一个fd号,服务器根据这个fd号与特定客户端通信。

但是在udp中,我怎么能听一个特定的客户?

在我的tcp服务器中,在客户端连接到服务器之后,创建一个线程并监听该客户端。 因此对于每个客户端,都有一个线程根据从accept函数返回的fd号进行监听。 所以任何消息都可以根据这个fd号发送给特定的客户端。

我怎样才能在udp服务器中实现这一点?

谢谢你的回答。

    您使用recvfrom查找源IP /端口,然后使用sendto进行回复。 您只需要bind以选择服务器端口。 你不accept 。 UDP的所有connect都设置为默认目标(您计划使用sendto覆盖)。

    这很简单。 如你所知UDP是无连接的,它可能共享同一个端口。所以想法就在这里。只需为每个客户端创建线程。如果你有更多的CPU核心,它会很棒。你可以将每个核心用于特定数量的客户端。 (它可以通过map完成)现在当同一个客户端再次敲响时,只需将他发送到该线程和核心。所以如果你有1 … n核心,你必须创建n线程,并为每个线程设置cpu。

    我已经用这种方式对8核心服务器进行了实验,并且工作正常。

    几天之后,我将这些代码放在我的博客上,然后把它解决为千兆交换机.. ?

    matrixsust.blogspot.com

    希望能帮助到你。

    只需创建一个UDP套接字并调用connect()即可。 但你不想这样做。 UDP服务器的全部乐趣在于它们只需要一个套接字。 想一想。 您只需要TCP中的线程,因为您必须拥有专用套接字,而专用线程是最简单(而不是唯一)处理它的方式。 在UDP中,您可以jst继续从同一个套接字读取,源地址告诉您每个图表来自哪个客户端。

    我用recvfrom和sendto函数。 首先,客户端通过sendto向服务器发送消息。 和服务器通过recvfrom接收消息。 在recvfrom中,我通过sockaddr_in struct获取客户端的地址。 在我无法绑定此并使用sendto之后

      以上就是c/c++开发分享c中的udp聊天服务器相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(编程笔记)。


      推荐阅读
      • 深入解析C语言中结构体的内存对齐机制及其优化方法
        为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
      • C语言中全部可用的数学函数有哪些?2.longlabs(longn);求长整型数的绝对值。3.doublefabs(doublex);求实数的绝对值。4.doublefloor(d ... [详细]
      • Web开发框架概览:Java与JavaScript技术及框架综述
        Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
      • 深入理解Linux网络编程:UDP协议实战解析
        深入理解Linux网络编程:UDP协议实战解析 ... [详细]
      • DHCP三层交换机设置方式全局模式和接口模式设置方式和命令resetsave回车输入yreboot输入n输入y重启后就恢复默认设置了默认用户名密码adminAdmin@huawei ... [详细]
      • Python 数据可视化实战指南
        本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
      • 结城浩(1963年7月出生),日本资深程序员和技术作家,居住在东京武藏野市。他开发了著名的YukiWiki软件,并在杂志上发表了大量程序入门文章和技术翻译作品。结城浩著有30多本关于编程和数学的书籍,其中许多被翻译成英文和韩文。 ... [详细]
      • 解决Bootstrap DataTable Ajax请求重复问题
        在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
      • 第二十五天接口、多态
        1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
      • 单片机入门指南:基础理论与实践
        本文介绍了单片机的基础知识及其应用。单片机是一种将微处理器(类似于CPU)、存储器(类似硬盘和内存)以及多种输入输出接口集成在一块硅片上的微型计算机系统。通过详细解析其内部结构和功能,帮助初学者快速掌握单片机的基本原理和实际操作方法。 ... [详细]
      • 你的问题在于:1. 代码格式混乱,缺乏必要的缩进,导致可读性极低;2. 使用 `strlen()` 和 `malloc()` 函数时,必须包含相应的头文件;3. `write()` 函数的返回值处理不当,建议检查并处理其返回值以确保程序的健壮性。此外,建议在编写代码时遵循良好的编程规范,增加代码的可维护性和可读性。 ... [详细]
      • 本文深入解析了JDK 8中HashMap的源代码,重点探讨了put方法的工作机制及其内部参数的设定原理。HashMap允许键和值为null,但键为null的情况只能出现一次,因为null键在内部通过索引0进行存储。文章详细分析了capacity(容量)、size(大小)、loadFactor(加载因子)以及红黑树转换阈值的设定原则,帮助读者更好地理解HashMap的高效实现和性能优化策略。 ... [详细]
      • 深入解析Linux内核中的进程上下文切换机制
        在现代操作系统中,进程作为核心概念之一,负责管理和分配系统资源,如CPU和内存。深入了解Linux内核中的进程上下文切换机制,需要首先明确进程与程序的区别。进程是一个动态的执行流,而程序则是静态的数据和指令集合。进程上下文切换涉及保存当前进程的状态信息,并加载下一个进程的状态,以实现多任务处理。这一过程不仅影响系统的性能,还关系到资源的有效利用。通过分析Linux内核中的具体实现,可以更好地理解其背后的原理和技术细节。 ... [详细]
      • 利用 Python Socket 实现 ICMP 协议下的网络通信
        在计算机网络课程的2.1实验中,学生需要通过Python Socket编程实现一种基于ICMP协议的网络通信功能。与操作系统自带的Ping命令类似,该实验要求学生开发一个简化的、非标准的ICMP通信程序,以加深对ICMP协议及其在网络通信中的应用的理解。通过这一实验,学生将掌握如何使用Python Socket库来构建和解析ICMP数据包,并实现基本的网络探测功能。 ... [详细]
      • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
        2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
      author-avatar
      Kluter
      这个家伙很懒,什么也没留下!
      PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
      Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有