刚刚学习socket想问个问题,如果我有一个server,多个clientserver与每个client都有对应接收和发送的socket,每个client也与server有接收和发送消息的socket每次会有一个client激活,激活后这个client做一点动作,这个动作会发送一个消息给server,server收到这个消息后要转发给每一个client,这种时候不会有多线程问题如果同时所有的client激活,然后在30秒内大家会在不一定的时间里面作出动作,第一个作出动作的人的动作有效,其余的人动作作出会被拦截。 几秒后又重新刷新。30秒内允许大家做动作。我的问题是,在用socket时,似乎不能直接用多线程里面学的东西(我学的浅哈)。像我情况这样的,有多个socket同时交流的多线程应该用一些什么东西,什么概念呢。请各位前辈指教下,我按着知识点学习学习。

解决方案 »

  1.   

    服务器端,accept一个socket之后,使用new Thread来处理这个socket
    如new Handler(socket).start()
    剩下的工作就只和这个socket有关了,每个处理socket的线程之间是独立的。
    所以 client和server之间的交互就是相互独立的,不会有影响。
      

  2.   

    我突然想了个办法,如果server有一个lock的话,是不是就解决了呢
      

  3.   


    因为所有client可以动作的时候,我怕一个client按了动作后,另外一个因为延迟的原因还没有被禁止动作的client也按了动作,理论上我只允许一个client动作。 如果给每个socket一个线程,我感觉仍然可能会出现情况,不知道对不对。
      

  4.   

    Client端按了键之后给Server端发送一个信号,该server端有个字段是一个线程同步的集合,不断把收到的信号扔里面,取出第一个信号并判断是哪个client发送的,然后发回一条指令给他,他做出相应动作,其他没收到的就没反应,这样可以吧
      

  5.   

    Client端按了动作之后不一定非要动作,可以先发信息给server端,在server端设置一个线程同步的集合字段,装发过来的信息,然后取出第一个,判断是哪个client发送的,然后再给他发个信息,收到后就做出动作,没收到的就不动。这样似乎也可以吧