C# 制作局域网内聊天工具

小黄蛋 2018-02-24 05:20:24
准备做一个聊天工具,碰到下面几个问题
1:是否必须具备服务端,因为我是准备给多人使用的,服务端是否需要在指定电脑上?
2:能不能做类似ipmsg的聊天工具?
...全文
656 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
求知若愚 2018-02-26
  • 打赏
  • 举报
回复
局域网聊天工具实现起来很简单,利用好Socket通讯就行,可以参考一下HPSocket
  • 打赏
  • 举报
回复
类似的问题我可以引申一下,就是前一段时间炒作的特别火热的“区块链技术”项目,许多疯投都把钱砸到这些项目上,我看主要还是要落实到骗广大股民的钱的地步、传销的地步,而不是100年内真正的社会服务核心技术。我对这种技术热根本不看好(虽然我也研究其应用开发)。
  • 打赏
  • 举报
回复
打个比方吧,社会上的“流氓帮派'去某个宴会赴宴,每一个流氓都高喊一声”我是谁谁谁,我现在到此地,不服直接到我这一桌来单挑!”,于是流氓之间互相就记住了对方的位置,当需要说什么简单的“聊天信息”时直接走过去说就行了。 而基于互联网架构的系统,则不是仅仅为“聊天”这么初级的事情而设计的,它其实是为复杂的企业级应用设计的,所以服务器不但是会中转聊天文本信息,而且还负责统筹实行许多业务服务功能。就好像是市政公司的网点,或者银行网点,绝不能比照着“流氓聚会”的方式来设计。
  • 打赏
  • 举报
回复
所以你的两个问题,单纯从技术上看是“不需要服务器、可以 ipmsg 方式”的。但是我不建议花那个时间。我建议你开发基于 Hybrad 技术的、适合互联网范畴的系统。
大鱼> 2018-02-25
  • 打赏
  • 举报
回复
局域网聊天工具实现起来很简单,利用好Socket通讯就行,可以参考一下HPSocket
xuzuning 2018-02-25
  • 打赏
  • 举报
回复
TCP/IP 通讯是单工的,只能实现客户端到服务端的单向通讯 要做到双工,则必须做到每个终端同时具有客户端和服务端的功能 因此,看似 局域网内聊天 很简单(不需要跨越路由器),但实际上比开发跨路由器的网络通讯还要复杂 由于没有主服务器,每个终端都需配置有通讯调度功能,以阻止自己与自己的会话,否则一旦形成回环,整个系统就崩溃了
  • 打赏
  • 举报
回复
“局域网聊天工具”天生就是点对点的、对等的,所以不需要服务器。 但是作为“玩一玩儿”可以,作为一个项目,我还是建议你直接开发互联网聊天工具,有外网服务器集群架构支撑的聊天工具。
mk_lucifer 2018-02-25
  • 打赏
  • 举报
回复
1.服务器必须的,因为这存在连接的问题,否则不知道要连接谁,不过所有IP都是固定IP则另当别论。。。 2.局域网是否为多级路由,如果是多级路由固定IP也不行,必须有一个服务器建在高级路由器上,即使不交换数据,也需要通知各用户绑定的udp,不知道对方端口都谈什么通讯。。。。 3.如果只是简单的聊天,在同一路由下,就简单了,各自绑定固定端口,并告知IP就OK。。。 4.还有注意udp协议有可能协议包先后顺序不同的,还可能丢包,所以要解决之一可能存在的问题,但他的好处就是可以避开服务器,用户间直接通讯,用TCP需要服务器转发。。。
stevenjin 2018-02-25
  • 打赏
  • 举报
回复
可以先了解下TCP和UDP通信协议
  • 打赏
  • 举报
回复
让我们随便找一个比较实际的大一点的使用单位,比如说一个公司有好几个办公室,每一个大办公室都分别是一个网段,比如说几个办公室在6层楼,而另外2个大办公室在22层楼,甚至还有几个办公室在几千公里之外,那么这就别乱架构什么“局域网”了。所以开发办公聊天软件,你要是按照公网的思路来设计,一劳永逸,而且学会了互联网时代的技术。何况现在互联网已经向 5G、IPv6等概念转移,更加不需要你过度纠结“局域网”这个说法,尽量学会互联网技术而不是仅仅局域网技术。
  • 打赏
  • 举报
回复
技术上我回答一下你的第一个问题: 所谓的“局域网聊天”通常是指在一个最低一级的单个路由器下面几个电脑,通过 udp 组播来发布“我开机了”这样的消息。那么所有进程都监听组播消息,当收到这样的消息时,就知道了对方的 ip,于是把对方当作聊天服务器,向对方固定端口发送消息来报告自己的 ip。 这样,每一个机器启动之后,把自己的ip通知给网段内所有事先启动的进程,同时又能收到所有事先启动的进程发来的它们的 ip 信息。最终每一个机器都知道了网段内其它可以通讯的机器的 ip。 这样,每一个进程既是客户端、又是服务器。由于这是跑在最低级的“单独网段”内的,所以才支持“点对点”通讯,不需要一个最高层的集中服务器做中转,而是相互乱通讯即可。
  • 打赏
  • 举报
回复
如果你做一个广域网的聊天系统,那么不论是只有最低级一个网段的“局域网”,还是真正多网段的多层 NAT 路由器的局域网、城域网,或者是公网,你都通吃。 做“局域网聊天工具”实际上一些培训班参考20年前的“飞秋”之类的一点源代码来忽悠学员的。虽然简单一点点,但是学员没有学到更加实用的互联网时代的技术,可惜!
秋的红果实 2018-02-24
  • 打赏
  • 举报
回复
1、一般情况下,是需要一个服务器的 二般情况没想过
毕业设计制作局域网语音聊天软件的毕业论文、答辩ppt一并上传了,不得已,赚点分,有需要的朋友下吧。论文。答辩成绩为“良好”。目录结构如下: 目录 局域网聊天工具设计 1 ——文本聊天、文件传输及用户管理 1 LAN Chat Tool Design 2 ——Text chat, file transfer and user management 2 第1章 引言 3 1.1 系统开发的背景 3 1.2 聊天工具开发的目标 3 1.3 聊天工具开发的现实意义 3 第2章 开发平台与相关知识简介 5 2.1 系统综合要求 5 2.1.1 硬件要求: 5 2.1.2 程序运行环境: 5 2.2 C# 简介 5 2.3 MicroSoft .NET Framework 简介 5 2.4 Microsoft DirectX SDK 简介 6 2.5 .NET 与多线程技术 6 2.6 C/S结构与WINDOWS SOCKETS网络编程 6 2.7 XML简介 9 第3章 需求分析 10 3.1 用户需求 10 3.2 系统功能需求 10 3.3 性能要求 10 3.4 测试环境规定 11 3.5 可行性研究 11 第4章 系统设计 12 4.1 系统目标 12 4.2 系统功能结构 12 4.3 业务流程图 13 4.4 系统模块划分 13 第5章 系统模块详细设计 14 5.1 文本聊天模块实现 14 5.1.1 文本聊天模块概述 14 5.1.2 文本聊天服务器工作原理 14 5.1.3 文本聊天客户端工作原理 15 5.1.4 P2P文本聊天 16 5.2 文件传输模块实现 19 5.2.1 文件传输模块概述 19 5.2.2 文件传输接收端工作原理 19 5.2.3 文件传输发送端工作原理 20 5.2.4 P2P文件传输 21 5.3 用户管理模块实现 24 5.3.1 用户管理模块概述 24 5.3.2 用户数据模型 24 5.3.3 XML文档结构设计 25 5.3.4 用户信息的保存 25 5.3.5 用户数据的遍历 26 第6章 系统测试 28 6.1 系统测试概述 28 6.2 白盒测试 28 6.2.1 测试环境配置 28 6.2.2 正确性测试 28 6.3 黑盒测试 29 6.3.1 测试环境配置 29 6.3.2 功能性测试 29 6.3.3 容错性测试 29 6.3.4 性能与效率测试 30 6.3.5 易用性测试 31 6.3.6 文档测试 31 第7章 主要问题及解决 32 7.1 多线程问题 32 7.2 套接字异常 32 7.3 网络流异常 32 参考文献 33 附录 34
内附1-19章的实战程序。 目录 第1章 c#语言及其开发环境 实例001 根据需要创建所需解决方案 实例002 统一窗体中控件的字体设置 实例003 设置程序代码行号 实例004 通过“格式”菜单布局窗体 实例005 为项目添加dll文件引用 实例006 为项目添加已有类 实例007 为项目添加第三方控件 实例008 为项目添加已有窗体 第2章 c#语言基础 实例009 利用for循环输出多行语句 实例010 输入并输出姓名 实例011 使用值类型和引用类型输出不同的字段 实例012 判断当前系统日期是星期几 实例013 定义局部变量输出不同的字段 实例014 定义循环内部变量并输出变量的值 实例015 定义常量计算圆的周长 实例016 使用“+”编写双重意义的表达式 实例017 使用小括号括起来的表达式 实例018 使用算术运算符开发简单计算器 实例019 使用条件运算符判断指定年份是不是闰年 实例020 使用typeof关键字获取类的内部结构 实例021 巧用位移运算符获取汉字编码值 实例022 使用异或运算符对数字进行加密 第3章 流程控制语句 实例023 利用if…else语句判断分数是否及格 实例024 利用switch语句判断时间 实例025 利用while语句判断大小 实例026 打印九九乘法表 实例027 使用break语句提前退出循环语句 实例028 使用continue语句转移至循环开始处 实例029 使用流程控制语句报销业务花销 实例030 输出当前系统时间 实例031 利用for循环实现完数计算 实例032 开发一个猜数字游戏 第4章 字符与字符串 实例033 字母与ascii码的转换 实例034 获取字符串中汉字的个数 实例035 从字符串中分离文件路径、文件名及扩展名 实例036 对字符串进行加密与解密 实例037 开发一个进制转换器 实例038 将字符串的每个字符进行颠倒输出 实例039 根据标点符号对字符串进行分行 实例040 将汉字转换为拼音 实例041 商品金额的大小写转换 实例042 根据年份判断十二生肖 实例043 将字母全部转换为大写或小写 实例044 汉字与区位码的转换 第5章 数组和集合 实例045 在数组中添加一个元素 实例046 在数组中添加一个数组 实例047 计算两个矩形矩阵的乘积 实例048 获取多维数组的行数与列数 实例049 使用快速排序法对一维数组进行排序 实例050 使用sort方法对数组进行快速排序 实例051 按指定条件在数组中检索元素 实例052 反转数组中元素的顺序 实例053 使用希尔排序法对一维数组进行排序 实例054 向班级集合中添加学生信息 实例055 不改变长度删除数组中的元素 实例056 删除数组元素后改变其长度 第6章 c#面向对象程序设计 实例057 创建类的对象 实例058 使用构造函数 实例059 通过定义方法求一个数的平方 实例060 使用重载方法实现不同类型数据的计算 实例061 使用属性存储用户编号和姓名 实例062 使用索引器 实例063 通过类继承计算梯形面积 实例064 封装类实现一个简单的计算器 实例065 通过结构计算矩形的面积 实例066 通过结构计算圆形的面积 实例067 使用面向对象思想查找字符串中的所有数字 实例068 通过类的多态性确定人类的说话行为 第7章 异常处理和程序调试 实例069 使用try…catch语句捕获异常 实例070 根据实际年龄判断虚岁,使用try…catch捕获异常 实例071 调试程序执行时出现的结果 实例072 使用异常处理语句捕获异常 实例073 捕获连接数据库异常 第8章 windows窗体 实例074 简单的登录窗体 实例075 关闭窗体提示 实例076 创建简单的mdi应用程序 实例077 实现重复高效地利用基窗体 实例078 尝试制作一个半透明渐显窗体 实例079 使窗体标题栏文字右对齐 实例080 窗口间移动按钮 实例081 窗体中滚动的字幕 实例082 使用任意组件拖动窗体 实例083 窗体换肤程序 第9章 windows应用程序常用控件 实例084 在c#中设计出色彩斑斓的按钮 实例085 自动删除textbox控件中的非法字符 实例086 在richtextbox控件中替换文本文字 实例087 利用richtextbox控件实现文字定位与标示 实例088 将数据表中的字段添加到combobox控件中 实例089 对listbox控件中的数据进行排序 实例090 listbox控件拒绝添加重复信息 实例091 限制用户名称长度及设置密码文本 实例092 带查询功能的combobox控件 实例093 利用选择控件实现权限设置 实例094 利用richtextbox控件显示图文数据 实例095 在listbox控件间交换数据 第10章 windows应用程序高级控件 实例096 使用imagelist组件制作动画图片 实例097 在combobox下拉列表中显示图片 实例098 在listview控件中实现修改功能 实例099 将数据库数据添加到listview控件 实例100 在listview控件中绘制底纹 实例101 在treeview控件节点中显示图片 实例102 使用树型列表动态显示菜单 实例103 使用treeview控件遍历磁盘目录 实例104 使用errorprovider组件验证文本框输入 实例105 使用helpprovider组件调用帮助文件 实例106 使listview控件中的选择项高亮显示 实例107 在列表视图中拖动视图项 实例108 实现带复选框的treeview控件 实例109 将xml文件节点绑定到treeview控件中 实例110 修改treeview控件的节点文本 第11章 c#面向对象高级技术 实例111 利用接口实现选择不同的语言 实例112 使用接口作为方法参数进行编程 实例113 自定义抽象类计算圆形的面积 实例114 重写抽象方法实现多态性 实例115 使用密封类密封登录用户信息 实例116 使用密封类封装个人身份证信息 实例117 使用迭代器显示公交车站点 实例118 通过迭代器实现文字的动态效果 实例119 使用分部类制作一个计算器 实例120 使用分部类显示员工信息 实例121 使用泛型存储不同类型的数据列表 实例122 使用泛型去掉数组中的重复数字 实例123 通过重写虚方法实现加法运算 实例124 使用迭代器实现倒序遍历 实例125 通过泛型查找数组中的元素 第12章 ado.net数据访问技术 实例126 连接加密的access数据库 实例127 使用odbc dsn连接sql server数据库 实例128 使用ado.net对象录入数据 实例129 利用存储过程录入数据 实例130 使用oledbdatareader读取文本文件的内容 实例131 使用sqldatareader读取用户登录信息 实例132 使用断开式连接的方式录入数据 实例133 使用断开式连接批量更新数据库中的数据 实例134 使datagridview控件中被选定单元格的所在行变色 实例135 在datagridview控件中隔行换色 实例136 连接excel文件 实例137 读取和保存用户头像 实例138 判断是否重复输入数据 实例139 删除datagridview控件中的指定行 实例140 将access数据库导入excel文件中 第13章 水晶报表与打印 实例141 设计带有背景图的水晶报表 实例142 设置水晶报表的打印日期与时间 实例143 设置水晶报表中节的背景图片 实例144 打印窗体中的数据 实例145 打印商品入库单据 实例146 使用打印控件实现分页打印 实例147 动态绑定水晶报表 实例148 在水晶报表中使用公式字段 实例149 设计分组统计报表 实例150 打印一个空学生证 实例151 自定义横向或纵向打印 实例152 自定义打印页码范围 第14章 文件及数据流技术 实例153 根据日期动态建立文件 实例154 将长文件名转换成短文件名 实例155 获取所有逻辑磁盘目录 实例156 使用递归法删除文件夹中的所有文件 实例157 按行读取文本文件中的数据 实例158 使用缓冲流复制文件 实例159 文件批量更名 实例160 复制文件时显示复制进度 实例161 对指定文件夹中的文件进行分类存储 实例162 将文本文件转换成网页文件 实例163 伪装文件夹 实例164 word目录提取工具 第15章 gdi+绘图 实例165 在图像中实现自定义标记 实例166 辉光效果的文字 实例167 渐变效果的文字 实例168 绘制多边形 实例169 简单画图程序 实例170 仿qq截图功能 实例171 模拟石英钟 实例172 绘制贝塞尔曲线 实例173 绘制图形验证码 实例174 以椭圆形显示图像 实例175 使用双缓冲技术绘图 实例176 批量添加图片水印 第16章 线程的使用 实例177 使用线程读取数据库中的数据 实例178 使用线程制作qq农场小游戏 实例179 使用线程实现大容量数据的计算 实例180 使用多线程制作端口扫描工具 实例181 使用线程扫描局域网ip地址 实例182 使用线程休眠控制图片以百叶窗效果显示 实例183 使用线程控制向窗体中拖放图片并显示 实例184 使用线程制作动画效果的状态栏 实例185 使用线程遍历文件夹 实例186 使用线程实现从左向右以拉伸的方式显示图像 第17章 网络编程技术 实例187 通过ip地址获取主机名称 实例188 创建web页面浏览器 实例189 获取网络信息及流量 实例190 远程关闭与重启计算机 实例191 设计点对点聊天程序 实例192 电子邮件的发送与接收 实例193 获取网络中所有工作组名称 实例194 列出指定工作组中的所有计算机名 实例195 监测当前网络连接状态 实例196 使用udp协议设计聊天室 第18章 注册表技术 实例197 禁止运行注册表 实例198 使应用程序开机自动运行 实例199 获取本机安装的软件清单 实例200 禁止使用windows任务管理器 实例201 清除ie地址栏中的历史网址 实例202 将磁盘驱动器隐藏 实例203 禁止使用命令提示符 实例204 禁止修改ie浏览器主页 实例205 设置ie浏览器的默认主页 实例206 设置ie浏览器的默认下载路径 第19章 c#语言新技术 实例207 使用隐式类型局部变量实现字母的大小写转换 实例208 使用扩展方法显示员工信息 实例209 使用lambda表达式查找指定字符串 实例210 检查序列中是否包含指定元素 实例211 使用linq在一个循环中遍历多个数组 实例212 过滤文章中包含指定单词的句子 实例213 使用linq生成随机序列 实例214 筛选指定类型的元素 实例215 使用linq技术对对象进行筛选操作 实例216 使用linq技术对对象进行排序操作 实例217 使用linq技术对对象进行聚合操作 实例218 使用linq技术对对象进行联接操作 第20章 windows应用程序打包部署 实例219 打包程序时设置桌面图标 实例220 打包.net framework 4.0框架

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧