C# 即时通讯软件开发

企业通用软件 2014-04-13 06:39:23
现在用C#做一个即时通讯软件,客户端和服务器端都用C#,需要是在公网和内网中都能使用。其中包含文件传输、视频、语音聊天,这几个功能最好是通过P2P技术来实现,不要通过服务器转发。

如果客户端在不同的网段中,互相之间发送消息,如果不通过服务器转发就要考虑NAT打洞,用socket可以实现,但是各种异常处理及打洞过程都要自己写代码实现,比较麻烦。

看了WCF的介绍,WCF提供双工模式,服务器端和客户端可以直接通讯,但是不知道用WCF能不能实现两个客户端之间的直接通讯,望赐教。如果可以实现,就能省去很多socket编程的细节处理。

另,有那位高手知道C#下,有那些可以使用的即时通讯框架或相关技术,不想自己用socket来实现,关键是要能实现NAT穿透就可以。
...全文
2801 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
即时通讯我就知道一个xmpp
企业通用软件 2014-07-29
  • 打赏
  • 举报
回复
谢谢大家的意见,现在还是决定先用服务器转发,这个是一定要做的,等这个搞好了再说吧
於黾 2014-05-04
  • 打赏
  • 举报
回复
引用 45 楼 u011048876 的回复:
[quote=引用 44 楼 Z65443344 的回复:] 我其实挺奇怪飞秋(feiQ)这个软件的 它不是基于UDP的吗?比如查找谁在线,很显然是发了个广播出去,然后收听 否则也没可能在4秒之内遍历所有的网段去连接一遍吧 可是,广播不是会被路由器屏蔽么,为什么不同网段也能够在线查找到呢?
他一开始出来是仿飞鸽传书,不知道现在有没有自己扩展协议,不过日本人写的飞鸽传书的协议是公开的,你可以搜索下。[/quote] 查看了一下协议的简介,没有看源码.百度文库里给的简介,说的就是发送广播. 我只是在奇怪为什么广播能够跨网发送. 我们有个核心交换机,上面分了9个VLAN,都是不同的网段,按理说广播到核心交换那里应该就终止了,不会转发到其他网段里去啊. 也有可能是核心交换里做了什么设置,让特定端口的广播允许转发了?
新旅程 2014-05-01
  • 打赏
  • 举报
回复
引用 44 楼 Z65443344 的回复:
我其实挺奇怪飞秋(feiQ)这个软件的 它不是基于UDP的吗?比如查找谁在线,很显然是发了个广播出去,然后收听 否则也没可能在4秒之内遍历所有的网段去连接一遍吧 可是,广播不是会被路由器屏蔽么,为什么不同网段也能够在线查找到呢?
他一开始出来是仿飞鸽传书,不知道现在有没有自己扩展协议,不过日本人写的飞鸽传书的协议是公开的,你可以搜索下。
於黾 2014-04-30
  • 打赏
  • 举报
回复
我其实挺奇怪飞秋(feiQ)这个软件的 它不是基于UDP的吗?比如查找谁在线,很显然是发了个广播出去,然后收听 否则也没可能在4秒之内遍历所有的网段去连接一遍吧 可是,广播不是会被路由器屏蔽么,为什么不同网段也能够在线查找到呢?
gangAndgang 2014-04-30
  • 打赏
  • 举报
回复
要即时通讯,还是老实的用socket吧,WCF那东西没法
hudsonhuang 2014-04-30
  • 打赏
  • 举报
回复
引用 35 楼 u013402605 的回复:
.net 4.5好像封装了一个P2P的类
.net很早就封装了,但是要依赖windows的一个组件(不是所有的windows都支持,而且要人手启动) 还要有一个索引服务器
Aricc 2014-04-27
  • 打赏
  • 举报
回复
引用 7 楼 garfield21 的回复:
[quote=引用 2 楼 sp1234 的回复:] 如果你想开发一个互联网IM(而不是仅限于局域网的IM),你用“服务器转发方式”做过能够应付上百人自由聊天的IM吗?做了之后,在纠结什么p2吧! wcf是面向业余开发人员进行了巨大的封装的一个东西,跟tcp(或者socket之类)的不能直接相比。而且不管有些人如何介绍wcf的实现方法,实际上靠谱的也就是在http上进行封装(变大而且变慢了几倍)的结果。你把它看作什么socket的替代,这完全看不出来什么前途。
谢谢你的解答,那就是说wcf是不可能替代Socket的,那我也只能是通过Socket来实现各个功能了吧?[/quote] 这个家伙,有点水平,就是说话不大好听。 另外,WCF的性能确实是一个问题。
冬夜 2014-04-27
  • 打赏
  • 举报
回复
路过帮顶,学习下
lirong389511484 2014-04-26
  • 打赏
  • 举报
回复
很不错 很好很强大哦 真的神使用 快来微观
  • 打赏
  • 举报
回复
GG2013给你一切所需 GG2013-外网仿QQ通讯
livelymoon 2014-04-26
  • 打赏
  • 举报
回复
引用 26 楼 hudsonhuang 的回复:
[quote=引用 25 楼 yanran_hill 的回复:] 那个...有个叫IPMSG的软件,代码是公开的可以下载,我记得是使用UDP通信的,把这个软件的代码改一改,不知道是否可行? 另外:关于"sp1234"说的 WCF "实际上靠谱的也就是在http上进行封装(变大而且变慢了几倍)的结果。", 说法是不是略显得武断了?我曾经开发过使用WCF的Service,是采用NetTcpBinding通信方式,不过没有做过大并发连接测试,几十个客户端的连接还是可以的
局域网跟互联网完全两个概念。。。 [/quote] IPMSG也是可以跨网的
tcmakebest 2014-04-26
  • 打赏
  • 举报
回复
先用着服务器转发吧,搞懂了再研究P2P就容易了
zzyhost 2014-04-26
  • 打赏
  • 举报
回复
.net 4.5好像封装了一个P2P的类
tanta 2014-04-25
  • 打赏
  • 举报
回复
WCF就是一个玩具,性能较弱,做产品,还是老老实实用Socket好了。
企业通用软件 2014-04-23
  • 打赏
  • 举报
回复
UDP通讯 服务器和客户端 互相通讯的已经好了。 现在在看UDP打洞的资料
企业通用软件 2014-04-14
  • 打赏
  • 举报
回复
引用 15 楼 wangjun8868 的回复:
打洞什么的别想了,好好通过服务器转发吧,试试你就知道 只要代码写的好,高并发没问题
引用 16 楼 mjp1234airen4385 的回复:
如果你不是要给全国人民使用的话,服务器转发就够了。
如果用服务器中转用UDP还是TCP啊
aqa510415008 2014-04-14
  • 打赏
  • 举报
回复
引用 28 楼 garfield21 的回复:
[quote=引用 24 楼 mjp1234airen4385 的回复:] 难道,你想等到用户要发言的时候,才连接服务器。
如果用UDP实现,连接上服务器后,就断开了。 发消息时,用UDP发送完消息后,也就自动断开了[/quote] UDP用来广播还差不多,如果需要保证消息的必须接受到,我建议使用TCP
aqa510415008 2014-04-14
  • 打赏
  • 举报
回复
TCp通讯暂时是最好的一个方法,我最近也在搞一个网络通讯,搞出来可以拿来给大家点评点评
wmg494005678 2014-04-14
  • 打赏
  • 举报
回复
Socket服务器这块的开源框架有个SuperSocket,再就是迅雷有个 云加速开放平台,直接调用迅雷接口,什么都不用写,利用迅雷的P2SP技术,当然只是针对下载网址是:http://open.xunlei.com/index.html
加载更多回复(23)

110,534

社区成员

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

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

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