1、二者进行通信时,是直接端对端发送信和传送文件?还是先对服务器通信,然后服务器转发消息给目标主机?
2、如果是端对端直接发送是不是不需要服务器即可运行?可是监听的端口号怎么确定呢?因为客户端进行tcp通信时,每次开启的端口不一样,都是随即分配的。而只有服务器的端口是固定的,一直处于监听状态。
3、如果是通过服务器转发,那么传送文件怎么处理?我设想的传送文件用tcp,而发送即时信息用udp?如何在两台客户机之间建立直接的tcp连接?是否必固定双方端口?
谢谢。
14 个解决方案
#1
1、两者皆可,效率前者高,网络情况复杂时前者可能连不通
2、服务器维护的是用户在线状态,以及特殊情况下的消息转发,客户端端口也是由服务器维护的
3、由服务器维护客户端端口号
2、服务器维护的是用户在线状态,以及特殊情况下的消息转发,客户端端口也是由服务器维护的
3、由服务器维护客户端端口号
#2
请问楼上的 由服务器维护客户端端口号 这话什么意思
#3
1、二者进行通信时,是直接端对端发送信和传送文件?还是先对服务器通信,然后服务器转发消息给目标主机?
一个是即时通讯,另外一个是离线消息
2、如果是端对端直接发送是不是不需要服务器即可运行?可是监听的端口号怎么确定呢?因为客户端进行tcp通信时,每次开启的端口不一样,都是随即分配的。而只有服务器的端口是固定的,一直处于监听状态。
监听的端口号肯定是固定的,客户端的话,通过TCP连接即可回传数据
3、如果是通过服务器转发,那么传送文件怎么处理?我设想的传送文件用tcp,而发送即时信息用udp?如何在两台客户机之间建立直接的tcp连接?是否必固定双方端口?
服务器转发传送文件的话,就只能在服务器上缓存了
一个是即时通讯,另外一个是离线消息
2、如果是端对端直接发送是不是不需要服务器即可运行?可是监听的端口号怎么确定呢?因为客户端进行tcp通信时,每次开启的端口不一样,都是随即分配的。而只有服务器的端口是固定的,一直处于监听状态。
监听的端口号肯定是固定的,客户端的话,通过TCP连接即可回传数据
3、如果是通过服务器转发,那么传送文件怎么处理?我设想的传送文件用tcp,而发送即时信息用udp?如何在两台客户机之间建立直接的tcp连接?是否必固定双方端口?
服务器转发传送文件的话,就只能在服务器上缓存了
#4
那请问楼上的 如何固定监听的端口号呢?
#5
我用c# udpclient 怎么没有bind这个成员函数呢 2个客户端通信不需要知道服务器地址阿 怎么udpclient里面全是关于和服务器建立通信的函数 ?
#6
还是不大明白 我现在要做一个类似QQ的软件 如果2个好友之间发送文字聊天的话 在。net里是用udpclient么?是的话 怎么去绑定端口号呢?因为udp连接有四步 socket-bind-send/recv-close 怎么用bind这一步阿?
#7
我也是菜鸟。不过前几天我们留过这方面的作业,所以就看一下。我原本也想做成 QQ 的样子。但是后面放弃了。我的看法是,如果客户端端口是随机分配的,那么肯定需要一个服务器。如果客户端端口固定,那么只需要让两台机器上的客户端知道对方的 ip 就行了。
我做了一个 PostOffice 类实现收发。同步不同步,异步不异步的,有点不太好了。不过好歹我觉得还算清晰。收发的信息我用的是自定义的 Package 类。所以,我觉得比 MSDN 上给的例子更好一点。最起码,MSDN 上给的例子程序运行起来是不能正常结束的。
我一会把我的例子写到 Blog 上去,写完了就帖上来,希望能对你有所帮助。
我做了一个 PostOffice 类实现收发。同步不同步,异步不异步的,有点不太好了。不过好歹我觉得还算清晰。收发的信息我用的是自定义的 Package 类。所以,我觉得比 MSDN 上给的例子更好一点。最起码,MSDN 上给的例子程序运行起来是不能正常结束的。
我一会把我的例子写到 Blog 上去,写完了就帖上来,希望能对你有所帮助。
#8
http://www.cnblogs.com/ydong/archive/2007/05/06/737026.html
这是我写的随笔的 url
这是我写的随笔的 url
#9
study
#10
efijki(YD)谢谢你
我也是很困惑客户端端口随即分配这件事 问题是qq的好友聊天是不经过服务器的 我想 所以很想知道他们是怎么作的
我也是很困惑客户端端口随即分配这件事 问题是qq的好友聊天是不经过服务器的 我想 所以很想知道他们是怎么作的
#11
UdpClient的构造函数有一个是绑定本地端口的. 所以不需要bind()了.
#12
To dairuijia:
QQ 它一定会经过服务器。它只需要登录到服务器,服务器就能知道它的端口号是多少,然后通知想与这个客户端进行对话的其它客户端。不然的话,QQ 登录是为了什么?其它的客户端也根本不可能扫描六万多个端口来找它需要的 QQ 端口的。
知道 ip 和端口才能通信,我觉得这应该是 Socket 通信的基础。
我原来就是想按这个想法做个登录服务器,后来由于时间原因取消了。我觉得 QQ 需要服务器来告诉其它客户端的端口的证明是,如果你无法登录到服务器,那么你就无法与其它人聊天,尽管聊天方式被设置成点对点了。
QQ 它一定会经过服务器。它只需要登录到服务器,服务器就能知道它的端口号是多少,然后通知想与这个客户端进行对话的其它客户端。不然的话,QQ 登录是为了什么?其它的客户端也根本不可能扫描六万多个端口来找它需要的 QQ 端口的。
知道 ip 和端口才能通信,我觉得这应该是 Socket 通信的基础。
我原来就是想按这个想法做个登录服务器,后来由于时间原因取消了。我觉得 QQ 需要服务器来告诉其它客户端的端口的证明是,如果你无法登录到服务器,那么你就无法与其它人聊天,尽管聊天方式被设置成点对点了。
#13
efijki(YD)
对的 我是这样想的:
先登录服务器 在服务器注册本次登录的IP号码 登录之后就建立UDP套接字 直到关闭QQ为止
这个是用到局域网中 客户端会向服务器发送在线的信号和查找好友在线情况(这个在线问题QQ怎么处理的不是很了解)
如果要向某个好友发消息 双击的时候先查数据库在不在线(因为有可能隐身) 在线则获取他的IP地址进行聊天 不在线则把留言发给数据库暂时保存
这个中间先不考虑突然掉线或者死机或者中间换个IP号等异常情况 我现在能想到的处理异常 就是每次发送消息之前都去数据库查询是否在线 显然这个过程对服务器压力太大 所以现在只能这样处理:一旦打开聊天界面 二者进行对话 就认定是在线的 直到关闭聊天界面为止 第二次再双击的时候再去查询数据库是隐身还是不在线 至于在线或者离开就不需要查询 直接发送就可以了
您有没有更好的想法?
对的 我是这样想的:
先登录服务器 在服务器注册本次登录的IP号码 登录之后就建立UDP套接字 直到关闭QQ为止
这个是用到局域网中 客户端会向服务器发送在线的信号和查找好友在线情况(这个在线问题QQ怎么处理的不是很了解)
如果要向某个好友发消息 双击的时候先查数据库在不在线(因为有可能隐身) 在线则获取他的IP地址进行聊天 不在线则把留言发给数据库暂时保存
这个中间先不考虑突然掉线或者死机或者中间换个IP号等异常情况 我现在能想到的处理异常 就是每次发送消息之前都去数据库查询是否在线 显然这个过程对服务器压力太大 所以现在只能这样处理:一旦打开聊天界面 二者进行对话 就认定是在线的 直到关闭聊天界面为止 第二次再双击的时候再去查询数据库是隐身还是不在线 至于在线或者离开就不需要查询 直接发送就可以了
您有没有更好的想法?
#14
关于这个我没想太多。我想既然是小型程序,那不太需要考虑服务器的压力问题。。。
如果你要做个正式的项目,那应该找你们老师问问,或者去问问这里带 * 号的牛人。
如果你要做个正式的项目,那应该找你们老师问问,或者去问问这里带 * 号的牛人。
#1
1、两者皆可,效率前者高,网络情况复杂时前者可能连不通
2、服务器维护的是用户在线状态,以及特殊情况下的消息转发,客户端端口也是由服务器维护的
3、由服务器维护客户端端口号
2、服务器维护的是用户在线状态,以及特殊情况下的消息转发,客户端端口也是由服务器维护的
3、由服务器维护客户端端口号
#2
请问楼上的 由服务器维护客户端端口号 这话什么意思
#3
1、二者进行通信时,是直接端对端发送信和传送文件?还是先对服务器通信,然后服务器转发消息给目标主机?
一个是即时通讯,另外一个是离线消息
2、如果是端对端直接发送是不是不需要服务器即可运行?可是监听的端口号怎么确定呢?因为客户端进行tcp通信时,每次开启的端口不一样,都是随即分配的。而只有服务器的端口是固定的,一直处于监听状态。
监听的端口号肯定是固定的,客户端的话,通过TCP连接即可回传数据
3、如果是通过服务器转发,那么传送文件怎么处理?我设想的传送文件用tcp,而发送即时信息用udp?如何在两台客户机之间建立直接的tcp连接?是否必固定双方端口?
服务器转发传送文件的话,就只能在服务器上缓存了
一个是即时通讯,另外一个是离线消息
2、如果是端对端直接发送是不是不需要服务器即可运行?可是监听的端口号怎么确定呢?因为客户端进行tcp通信时,每次开启的端口不一样,都是随即分配的。而只有服务器的端口是固定的,一直处于监听状态。
监听的端口号肯定是固定的,客户端的话,通过TCP连接即可回传数据
3、如果是通过服务器转发,那么传送文件怎么处理?我设想的传送文件用tcp,而发送即时信息用udp?如何在两台客户机之间建立直接的tcp连接?是否必固定双方端口?
服务器转发传送文件的话,就只能在服务器上缓存了
#4
那请问楼上的 如何固定监听的端口号呢?
#5
我用c# udpclient 怎么没有bind这个成员函数呢 2个客户端通信不需要知道服务器地址阿 怎么udpclient里面全是关于和服务器建立通信的函数 ?
#6
还是不大明白 我现在要做一个类似QQ的软件 如果2个好友之间发送文字聊天的话 在。net里是用udpclient么?是的话 怎么去绑定端口号呢?因为udp连接有四步 socket-bind-send/recv-close 怎么用bind这一步阿?
#7
我也是菜鸟。不过前几天我们留过这方面的作业,所以就看一下。我原本也想做成 QQ 的样子。但是后面放弃了。我的看法是,如果客户端端口是随机分配的,那么肯定需要一个服务器。如果客户端端口固定,那么只需要让两台机器上的客户端知道对方的 ip 就行了。
我做了一个 PostOffice 类实现收发。同步不同步,异步不异步的,有点不太好了。不过好歹我觉得还算清晰。收发的信息我用的是自定义的 Package 类。所以,我觉得比 MSDN 上给的例子更好一点。最起码,MSDN 上给的例子程序运行起来是不能正常结束的。
我一会把我的例子写到 Blog 上去,写完了就帖上来,希望能对你有所帮助。
我做了一个 PostOffice 类实现收发。同步不同步,异步不异步的,有点不太好了。不过好歹我觉得还算清晰。收发的信息我用的是自定义的 Package 类。所以,我觉得比 MSDN 上给的例子更好一点。最起码,MSDN 上给的例子程序运行起来是不能正常结束的。
我一会把我的例子写到 Blog 上去,写完了就帖上来,希望能对你有所帮助。
#8
http://www.cnblogs.com/ydong/archive/2007/05/06/737026.html
这是我写的随笔的 url
这是我写的随笔的 url
#9
study
#10
efijki(YD)谢谢你
我也是很困惑客户端端口随即分配这件事 问题是qq的好友聊天是不经过服务器的 我想 所以很想知道他们是怎么作的
我也是很困惑客户端端口随即分配这件事 问题是qq的好友聊天是不经过服务器的 我想 所以很想知道他们是怎么作的
#11
UdpClient的构造函数有一个是绑定本地端口的. 所以不需要bind()了.
#12
To dairuijia:
QQ 它一定会经过服务器。它只需要登录到服务器,服务器就能知道它的端口号是多少,然后通知想与这个客户端进行对话的其它客户端。不然的话,QQ 登录是为了什么?其它的客户端也根本不可能扫描六万多个端口来找它需要的 QQ 端口的。
知道 ip 和端口才能通信,我觉得这应该是 Socket 通信的基础。
我原来就是想按这个想法做个登录服务器,后来由于时间原因取消了。我觉得 QQ 需要服务器来告诉其它客户端的端口的证明是,如果你无法登录到服务器,那么你就无法与其它人聊天,尽管聊天方式被设置成点对点了。
QQ 它一定会经过服务器。它只需要登录到服务器,服务器就能知道它的端口号是多少,然后通知想与这个客户端进行对话的其它客户端。不然的话,QQ 登录是为了什么?其它的客户端也根本不可能扫描六万多个端口来找它需要的 QQ 端口的。
知道 ip 和端口才能通信,我觉得这应该是 Socket 通信的基础。
我原来就是想按这个想法做个登录服务器,后来由于时间原因取消了。我觉得 QQ 需要服务器来告诉其它客户端的端口的证明是,如果你无法登录到服务器,那么你就无法与其它人聊天,尽管聊天方式被设置成点对点了。
#13
efijki(YD)
对的 我是这样想的:
先登录服务器 在服务器注册本次登录的IP号码 登录之后就建立UDP套接字 直到关闭QQ为止
这个是用到局域网中 客户端会向服务器发送在线的信号和查找好友在线情况(这个在线问题QQ怎么处理的不是很了解)
如果要向某个好友发消息 双击的时候先查数据库在不在线(因为有可能隐身) 在线则获取他的IP地址进行聊天 不在线则把留言发给数据库暂时保存
这个中间先不考虑突然掉线或者死机或者中间换个IP号等异常情况 我现在能想到的处理异常 就是每次发送消息之前都去数据库查询是否在线 显然这个过程对服务器压力太大 所以现在只能这样处理:一旦打开聊天界面 二者进行对话 就认定是在线的 直到关闭聊天界面为止 第二次再双击的时候再去查询数据库是隐身还是不在线 至于在线或者离开就不需要查询 直接发送就可以了
您有没有更好的想法?
对的 我是这样想的:
先登录服务器 在服务器注册本次登录的IP号码 登录之后就建立UDP套接字 直到关闭QQ为止
这个是用到局域网中 客户端会向服务器发送在线的信号和查找好友在线情况(这个在线问题QQ怎么处理的不是很了解)
如果要向某个好友发消息 双击的时候先查数据库在不在线(因为有可能隐身) 在线则获取他的IP地址进行聊天 不在线则把留言发给数据库暂时保存
这个中间先不考虑突然掉线或者死机或者中间换个IP号等异常情况 我现在能想到的处理异常 就是每次发送消息之前都去数据库查询是否在线 显然这个过程对服务器压力太大 所以现在只能这样处理:一旦打开聊天界面 二者进行对话 就认定是在线的 直到关闭聊天界面为止 第二次再双击的时候再去查询数据库是隐身还是不在线 至于在线或者离开就不需要查询 直接发送就可以了
您有没有更好的想法?
#14
关于这个我没想太多。我想既然是小型程序,那不太需要考虑服务器的压力问题。。。
如果你要做个正式的项目,那应该找你们老师问问,或者去问问这里带 * 号的牛人。
如果你要做个正式的项目,那应该找你们老师问问,或者去问问这里带 * 号的牛人。