日期:2014-05-19  浏览次数:20751 次

Socket问题 明早之前必须解决 急急急!!!!!!
大约有1000左右个客户端,每个客户端30秒送一个数据包,客户端第一次连接时的数据是一个客户端标识号,连接成功后每30秒送一次数据,但数据中不含客户端标识,我怎么才能在接受数据时,找到他第一次登录对应的客户端编号呢?(客户端是GPS终端设备)。另每5分钟会有一个心跳,判断连接是否正常。

原有发送方式   每30秒发送一个数据包,但数据包中含有客户端标识(原有程序是多线程)。现在要求修改原有程序,加入这个功能(原来的功能不能去掉,因为每30秒发送的一个数据包当中还有包含客户端标问供的数据,上面提到的是后加的数据传输协议)求解决办法
说的有点乱,如有需要,我可以把源码附上来   代码很少。
注:本人在这方面是菜菜菜菜菜。。。。



------解决方案--------------------
每个Socket不是都建立一个接受线程吗?

在建立接受线程的时候,把客户端的标识也传过去,接受的时候,不就可以知道是哪个客户端传

来的。
------解决方案--------------------
帮顶
------解决方案--------------------
第一次接收到客户端数据时就记录下其设备地址信息将其和一个端口绑定,看可不可以
------解决方案--------------------
你搞个数组把客户端一一对应起来不行么?用异步的socket
------解决方案--------------------
问:
1:每次发完就断连接吗?
2:客户端,又没有固定标志,如ip啥的?
------解决方案--------------------
用ArrayList把socket保存下来,最好定义一个类,类有socket和标识,然后ArrayList.add类保存;

或者干脆就hashtable,标识做key,内容保存socket。

应该用异步。
------解决方案--------------------
??????????????
不会!!!
------解决方案--------------------
“用户端第一次连接时的数据是一个客户端标识号”-----
对应一个新的socket连接,客户端标识号和这个socket是一一对应的。可以用hashtable保存,
键是客户端标识号,值是socket。

------解决方案--------------------
服务端Accept到的Socket和客户端是一一对应的,你可以通过这个Socket来判断是哪一个客户端发送过来的数据!
------解决方案--------------------
class user
{
socket s;
string username;
...
}

hashtable保存发来的标示号
------解决方案--------------------
学习