TC官方合作论坛

标题: 求教关于网络通信的问题 [打印本页]

作者: f45601535    时间: 2014-4-3 18:09
标题: 求教关于网络通信的问题
一对一的网络通信目前没有问题。疑问在于一对多的网络通信如何实现?
例如:我建立一个服务器,,,和三个客户端
怎么实现三个客户端可以同时向服务器发送信息呢并且服务器都能够接收到~~
建立服务器的一对一的步骤按照官方是顺序是:

[url=]1、网络.初始化() //初始化网络环境[/url]
[url=]2、服务器套接字句柄=网络.套接字(1)  //创建流式(TCP)套接字
3、网络.绑定(服务器套接字句柄,9999) //开启了计算机的9999端口,供外界连接
4、网络.**(服务器套接字句柄,5) //**套接字,设置可连接数为5个[/url][url=]5、客户端套接字句柄=网络.接受(服务器套接字句柄,返回IP)//这里程序会挂起等待,直到有客户端连接到来
6、网络.接收(客户端套接字句柄,接收缓存) //接收从客户端发送的字串[/url]
[url=]
[/url]
[url=]
[/url]
[url=]
[/url]

作者: jimye0526    时间: 2014-4-3 18:41
线程
作者: f45601535    时间: 2014-4-3 18:43
jimye0526 发表于 2014-4-3 18:41
线程

..一个客户端开一个线程吗?三个客户端就要开三个线程?
作者: 超自然    时间: 2014-4-3 18:47
本帖最后由 超自然 于 2014-4-3 18:51 编辑

一对多的关键在端口的使用上,一对端口只能对一台客户,因为被绑定了就不能再绑
因此,你应该这样想:
首先,你应该知道自己面临端口分配问题.你必须有一个数组来存放已分配的端口,配合一个端口发放方法用来产生一对,注意是一对不在记录数组中的端口用来给一台客户机.
第二;你应该这样想:
使用环境不同,可能此刻服务端正在与三台客户机通讯,也可能在与N台通讯,不管几台,服务端和客户机都不知道自己到底是第几个接入的.因此,哪怕你有了端口分配方法也不知道什么时候,由谁来分配.即调用该函数.
正因为无法确定,那么不如让服务端和客户端自己去协商.因此,你要这样考虑:
见过酒店的前台没有?酒店不知道客人几时上门,客人不知道自己到了会住几号房间.前台的美女服务员一直在等待顾客,有客人的时候办手续并且给顾客分配房间.
假如你的服务端有一个线程使用一个固定的端口,一直等待使用这个端口进入的连接请求(客人从酒店大门走进来,直到前台).发来信息的客户机向服务端报告自己的一些资料(客人拿出ZJ,美女服务员开始登记)接待线程调用端口分配方法获得新的,未被占用的端口,作为内容在固定端口应答回去(美女小姐查询空余房间,并且告诉客人可以入住).客户机收到应答,知道服务端分配的新的,未被占用的端口(客人从美女口中,知道自己要住哪个房,于是自己乘电梯前往房间).此时,接待线程开出新的线程,绑定刚刚分配出的新端口等待客户机使用该端口接入(前台的美女登记后,通常会打电话通知楼层服务员,某某房间已安排客人入住.楼层服务员接到后开始等待客人,此时客人已经获知自己的房间号,正在乘电梯前来).客户机通过从服务端分配来的新端口给服务端发一个消息,(客人到达楼层,见到楼层服务员,掏出前台的登记单据证明自己就是前台安排来的客人)服务端确认后回发确认消息用于确认客户机身份以及检查通讯是否正常.(楼层服务员确认客人身份,并且给客人打开房门,客人正式住进了酒店)

下一步就不用我说了吧,客户机关闭请求发送线程,解绑发送请求的固定端口
开出新线程挂住经过协商确立的新端口,此后程序使用的就是这组端口
而服务端的接待线程在,开出测试线程之后,循环回等待语句,继续挂住端口,等待下一个客户机请求.(前台的美女为客人分配完房间,又坐回自己的位子上嗑瓜子,聊QQ,等待下一个客人进入)

作者: f45601535    时间: 2014-4-3 19:01
超自然 发表于 2014-4-3 18:47
一对多的关键在端口的使用上,一对端口只能对一台客户,因为被绑定了就不能再绑
因此,你应该这样想:
首先,你 ...

谢谢版主的精彩回复,按照你的说法我在慢慢研究~~~




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1