如何用socket与多线程实现在服务器端并发处理多客户端的请求?

hxhazx 2013-11-14 06:11:25
本人对socket不是很熟,
现在的需求是:
客户端能够登录到服务器上去对数据进行增删改查及退出一系列操作;但多个客户端可以同进登录,如果它们并发操作,那么服务器端是不是应该用多线程,给每个客户分一个独立的线程,但不知道在服务器端应该怎么写代码实现各个线程之间的独立!
一个客户端一旦连上,只要它不退出,这个线程不应该结束!
...全文
926 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hxhazx 2013-11-19
  • 打赏
  • 举报
回复
我现在自己整出了一个解决的办法,比较粗陋,莫见笑: 主线程中用一个ServerSocket的accept()方法来对所有客户端发来的请求进行全部接收; 从接收得到的socket中读取客户ip地址信息,以此ip为依据判断之前该客户端是否已建立了与服务器的连接,如果之前还未建立,那么就在服务器端重开一个线程,并将此socket传入,线程中拿到这个socket之后在其内部进行相应的处理,该线程随后会被存入一个Map中,其以ip地址为键,线程对象为值; 下次如果此客户端再发来请求,就可以在此Map中直接找到处理它的线程来对其进行处理; 线程中在需要等待客户端信息才能继续的地方,暂时用wait来令其等待,当主线程又接到此客户端的一个请求信息之后,再将该线程唤醒(Notify); 当客户端断开连接时(服务器端会收到一个标记量),服务器端的线程运行结束,并将Map中的对应项移除。
  • 打赏
  • 举报
回复
给你个地址,去看看吧。 http://kanpiaoxue.iteye.com/admin/blogs/1956800 可以在这个基础上面修改一下。 推荐你使用netty来写你的服务器端,它的性能非常优秀。 然后你还是看看《Java网络编程》这本书吧。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧