日期:2014-05-17  浏览次数:21082 次

使用c#做的即时通讯软件,udp和tcp可以混合使用么?如果能的话需要注意什么东西?
在做即时通讯软件,使用c#语言,请教到别人 这种软件tcp,udp,http三种协议一起使用。udp登陆服务端后,客户端靠tcp保持一个连接。客户端用户的详细资料、好友信息……等不可丢失的信息使用tcp传输;客户端之间消息传输,文件发送,表情发送等使用udp传输。这样子的话,一个项目中同时用到tcp和udp的话,具体怎么做?比如该使用tcp的时候使用tcp用完了以后关掉连接,然后使用udp,这样一直往复,用什么打开什么的连接,不用即关掉;还是说在登陆那时起,客户端和服务端就建立起两个不同的连接,一直都打开(类似于两个不同的通道),各自用自己的连接收发数据,互不影响?还有就是同时使用的话,服务端用的同一个端口么?好像如果采用tcp长连接的话,服务端最大能接受的TCP客户端的默认值只有64个。我也不是很清楚,知道的给指导指导吧各位大神。             目前我实现的登陆,聊天,收发图片都是使用的udp协议(局域网测试没问题,发消息是通过服务端中转=======如果我把这个程序服务端放在具有公网ip的服务器上,客户端在不同的局域网,两个客户端之间是否可以通信?如果不行,需要做什么改进……)。还有就是在发送文件时,是说我不管发什么格式的文件都会发给对方存在一个目录下,还是说在发送的时候文档格式不一样,需要分开处理,例如word,excel,pdf,txt……等格式的文件,发送的时候分情况处理,接收的时候也分开处理?(有做过类似软件的大神如果有时间可以多给小妹指导下,感激不尽,个人qq:1225119390)

------解决方案--------------------
tcp udp都是基于套接字(socket)想怎么用就怎么用。端口不冲突就行。
udp做个端口绑定,然后就可以任意发了。又不管对方接受没。
tcp服务端得监听某个端口,然后处理连接上来的客户端
tcp客户端发起连接,指定ip和端口,连接上就可以发信息了。
http是应用层协议。
------解决方案--------------------
随便用,我现在就是混着用的,还有短信猫 UDP TCP   
------解决方案--------------------
tcp长连接通常不会去关闭,一直到客户端进程结束。目的是随时接受服务器推送的消息。

udp跟服务器之间不存在什么真正的连接,那Connect语句只是逻辑上的设置本地属性而并不与服务器握手。udp根本就是无真正连接的协议,因此无法保证发送成功率。你也不用纠结于什么“udp连接”。

在.net framwork封装的TcpListener类型中,其Tcp默认连接数是 int.MaxValue,你可以看看这个数是多大。

进行Tcp编程,应该尽量使用TcpListener和TcpClient(传输消息使用NetworkStream类),而不是Socket类。不仅仅因为这两三类封装得很高级很简练,而且因为其底层会自动使用完成端口(IOCP)技术,比Socket的默认技术更高级。

我们做软件,都是拿公网(互联网)来作为基本的验收测试。客户端在NAT路由器后边,经常还在两层或者三层NAT路由器后边。如果你只会做局域网内小软件,也许一些公司不懂这个差别,但是我相信也还有更多的公司懂得这个软件开发的差别。

发送文件的时序设计、是否接收端创建一个文件夹,这属于业务设计。你设计成为什么样,就要按照设计来编写代码。从来没有谁(除了一些满脑子只想着“这样写代码比较省力气”的学生)会仅从编码出发来说“我不想创建文件夹”或者说“我就想创建文件夹”。程序员说什么都是错的,他必须听设计人员的。
------解决方案--------------------
你想过的 别人一样能想过..

你想做的 别人一样也做过..

无非就是一个服务 开启监听 客户端TCP/IP  通过与远程服务建立连接,并且在服务端建立变量或者数据库来保存客户端连接状态以及IP信息.

A发送信息给B无非就是A发送信息到服务器 服务器做解析.看是给谁的.如果是给B

那么找到B的连接.send一个byte[] 就OK了..

所以 16#说的好.这个规则弄好了 就好说..
------解决方案--------------------
你这个问题就好像说十字螺丝刀和平口螺丝刀能不能一起用,一起用的话什么时候用十字的,什么时候用平口的。

答案很简单,该怎么用就怎么用。
------解决方案--------------------
可以,只有解析和发送的协议相同就OK