c# tcp 实现多人聊天

我用c#编写了一个局域网聊天的小软件,但是发现一个问题,单聊的时候怎么样去实现同时和多个人聊呢?就像腾讯的qq一样,可以支持多个人聊天,键入只是简单的show出窗体,会出... 我用c#编写了一个局域网聊天的小软件,但是发现一个问题,单聊的时候怎么样去实现同时和多个人聊呢?就像腾讯的qq一样,可以支持多个人聊天,键入只是简单的show出窗体,会出错,就是一个套接字使用了多次的问题。
请高手帮忙,谢谢了!
最好写的具体点!
我编写的聊天软件没有服务器端,只是两个软件之间就可以聊天,没有通过中间站点的转发,我所说的情况是,已经和一个人单独聊天了,再和另一个人去聊天,我感觉也就得去换一个端口,不能使用同一个端口号。
但是使用UDP传输数据不一定能够准确到达,也就是有一定的失败几率,所以采用tcp,其使用三次握手,更加可靠一些。
展开
 我来答
百度网友d242235
2010-06-02 · TA获得超过2385个赞
知道大有可为答主
回答量:1403
采纳率:84%
帮助的人:820万
展开全部
很简单。既然你能写出单聊(也就是P2P),那多人聊天其实是相似的,只要你了解对方的机器IP和端口号,就可以创建一个套接字去连接。
Socket soc = new Socket();
soc.ConnectToServer();

创建连接就是这样的代码,里面的参数需要指定协议(TCP/UDP),IP及端口,然后客户端就可以使用Socket.Send()方法发消息,服务端收到后,可以用TcpListener.AcceptTcpClient()方法收到客户端的Socket,同样调用Send()方法反馈给客户端。

所谓的UDP丢包或者存在准确率误差情况只是相对的,是一种单纯概念上的理解而已。事实上,在局域网这种稳定的网络环境中,使用UDP是最佳的选择,速度快,且编程较TCP方便。至于所谓的握手,无非是为了网络的检测,用在局域网这种层次的网络真的有必要吗,除非你是为了追求一些时髦的用语和技术。如果要设计握手,那应该是应用层上的协议了,这需要你自己来制定。其实,QQ就采用了UDP协议。

至于端口号,一台机器是不能同时开两个相同的监听端口的,但如果收外部的连接要求,一个端口号足够了。比如你开启了端口号2512(Oracle数据库的默认端口)来处理监听,那其他机器只要连接到这个端口号就能与你通信。还是Oracle为例,一个Oracle服务器可以创建与多个客户端的连接,但端口号也都是2512,这并不矛盾,因为服务器只监听一个端口,但它能收到所有的客户端连接,不知道你明白了吗?
googele
2010-06-02 · 超过14用户采纳过TA的回答
知道答主
回答量:82
采纳率:0%
帮助的人:0
展开全部
1.两人聊天, 如果不要服务器, 双方应该是对等的, 不区分服务器和客户端, 所以用UDP协议似乎更好.
2.想要多人聊, 又没有统一的服务器调度, 又要使用TCP, 只能开多个端口了.
3.你这样的软件已经有了, 飞鸽传书, 没有服务器, 可以对多人聊天和发文件, 使用UDP协议. 源代码也可以找到, 你可以参考一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式