聊天服务器和客户端实现?

标签 c sockets networking winsock lan

<分区>

很长一段时间以来,我一直渴望用 C 和 Winsock 实现聊天服务器,但我没有花时间。部分原因是,我仍然不确定关于在 Windows 操作系统上为聊天等内容构建服务器的一些概念性想法。

以下是我一直在思考的一些问题:

  • 用户 x 如何通过通用 LAN 连接到我的服务器 没有我依赖他们输入网络地址(例如地址 可能无效,重定向到不同的服务器等。)

  • 如果我使用广播来解决上述问题,是否足够可靠以进行聊天?

  • 由于数据包将在每台机器上被强制处理,并且如果有足够多的人加入,可能会占用大量带宽,这是否会潜在地对 LAN 进行 DDos 攻击?

  • 多播和广播有什么区别?多播真的优越吗?

根据请求,我对可靠性的定义是我可以在发送的数据包中始终如一地获取大部分数据。换句话说,我不介意丢失一些数据包,但我确实介意数据是否在传输过程中被弄得一团糟。

目前,我的问题比答案多得多,但我的主要观点是:

用 C 和 Winsock 实现局域网聊天最安全可靠的方法是什么?

最佳答案

How will user x connect to my server over a generic LAN without me relying 
on them to type in a network address( e.g. address could be
invalid, redirected to a different server, etc. )

使用已知服务器的封闭列表,或使用一些基于广播的自动发现系统。

If I use broadcasting to solve the above problem, will that be reliable 
enough for chat?

定义您对可靠性的要求。

Will that potentially DDos a LAN since the packets will be be forcibly handled on every machine and may take a lot of bandwidth if enough people join?

是聊天...产生的包量会比较短小。

What is the difference between multicasting and broadcasting? Is multicasting truly superior?

搜索网络。有很多关于多播的资源和信息,最准确地说,是 IP 多播。简而言之:

  • 广播传送到广播域中的所有主机。多播传送到所有明确加入多播组的主机,这些主机可能不在同一个广播域中(见最后一点)。

  • 广播强制交换机将广播数据包转发到其所有接口(interface)。智能交换机可以通过查看 IGMP 数据包获益,以了解必须将多播数据包转发到哪些接口(interface)。

  • 广播不能通过广播域树。如果路由器配置为路由多播(搜索 M-bone)

  • ,则多播数据包可以通过路由器

关于聊天服务器和客户端实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21211056/

相关文章:

c++ - 该代码中的错误是什么?

c - 我该如何摆脱这个错误

node.js - 使用 socket.io 和 webpack 构建 React 应用程序不起作用

linux - 如何测试网络内核模块的 tx_timeout 操作?

java - 发送带有Jpcap问题的SYN包

c - 具有递归调用 f(n/2) 和 f(n - 2) 的函数的时间复杂度?

c - C中的布莱克曼-哈里斯

java - 如何关闭JAVA客户端和Active-MQ队列之间的特定套接字

c - windows下绑定(bind)C语言

c# - 生成随机mac地址