我刚刚开始学还不是很懂。我看的编程的书大多浅显的例子都是讲的客户端和服务器的通信,即客户端发送数据给服务器,服务器处理后回复给该客户端。可是这样并不能达到两个客户端通信的目的。具体要怎么才能实现客户之间的通信呢?
如果用TCP需要对每个客户建立链接后才能通信,这个链接未释放前不能和其他用户建立链接。如果需要同时处理多用户就要用到并发技术,可以通过多进程多线程等方法。我现在还没学多进程多线程这些,但是我觉得假如用UDP,服务器就不需要和客户建立链接。服务器只要不停的收到再转发数据,那么是不是不采用并发也可能实现处理多用户(或者两个用户之间)通信呢?
例如只限定两个客户通信的情况。大概思路是客户1发送数据,里面包含客户2的地址信息。服务器收到后不是直接回复客户1而是使用比如sendto类似函数转发给客户2。不知道这一点能不能通过单进程实现呢?如果说服务器不能指定发送给其中一个客户端。那广播发送后让客户端通过判断决定是对方而不是自己发送的数据被服务器反馈回来了,再显示出来而达到通信的目的又行不行呢?
说了那么多。我主要是想问能不能不通过多进程、多线程或者I/O复用,select函数等我不懂的东西也能实现两个客户之间通信。如果可以就减少了好多东西了。我不要求能够有多广泛的应用,只要能实现两者间双向通信就好了。


gongji110 于 2008-04-18 17:13:36发表:
如果这样的话,那么TCP/IP协议就不行了,你要试试其他方案,想想UDP怎么弄吧,这个应该不错,网络游戏多用UDP协议来做。
hommy117 于 2008-04-18 16:58:18发表:
一般的通信模型是客户端要主动向服务器发起链接才能通信。如果客户1发给服务器要转发给客户2,那相当于服务器要主动找客户2链接。在客户2没和服务器建立链接的情况下服务器又怎么把需要转发的数据发给客户2呢?
hommy117 于 2008-04-18 12:09:56发表:
原来你在线啊。。。。麻烦上下QQ嘛--,--~
gongji110 于 2008-04-18 11:59:30发表:
记得周星驰的《九品芝麻官》里,三个强盗被豹头堵住了。第一个说,有本事别用你手中的刀,于是豹头用拳把他打死了;第二个说,有本事别用手,于是豹头用脚把他踹死了;第三个见状,说,有本事手脚刀都别用,于是豹头把用狮子吼把他震死了。
但是我不禁想问,如果再多一个或者几个暴徒,豹头要用什么来杀人呢?
舍弃了最好的利器,你是不是要事倍功半呢?