Java Socket线程的设计原理介绍

Java Socket线程的设计原理介绍

Java Socket线程我们经常会用到的技术,但是有很多程序员还是有不少的使用问题,下面我们就看看如何才能进行有关的代码编写,希望大家又说收获。网络的伟大之一也是信息共享,Server可以主动向所有Client广播消息,同时Client也可以向其它Client发布消息。

下面看看如何开发一个可以实时传递消息的程序。

JavaSocket线程的设计原理:

服务器端接受客户端的连接请求,同时启动一个线程处理这个连接,线程不停的读取客户端输入,然后把输入加入队列中,等候处理。在线程启动的同时将线程加入队列中,以便在需要的时候定位和取出。

{源码}

 
  1. importjava.io.*;
  2. importjava.net.*;
  3. importjava.util.*;
  4. importjava.lang.*;
  5. publicclassServerextendsServerSocket
  6. {
  7. privatestaticArrayListUser_List=newArrayList();
  8. privatestaticArrayListThreader=newArrayList();
  9. privatestaticLinkedListMessage_Array=newLinkedList();
  10. privatestaticintThread_Counter=0;
  11. privatestaticbooleanisClear=true;
  12. protectedstaticfinalintSERVER_PORT=10000;
  13. protectedFileOutputStreamLOG_FILE=newFileOutputStream("d:/connect.log",true);
  14. publicServer()throwsFileNotFoundException,IOException
  15. {
  16. super(SERVER_PORT);
  17. newBroadcast();
  18. //appendconnectionlog
  19. Calendarnow=Calendar.getInstance();
  20. Stringstr="["+now.getTime().toString()+"]Acceptedaconnection1512";
  21. byte[]tmp=str.getBytes();
  22. LOG_FILE.write(tmp);
  23. try
  24. {
  25. while(true)
  26. {
  27. Socketsocket=accept();
  28. newCreateServerThread(socket);
  29. }
  30. }
  31. finally
  32. {
  33. close();
  34. }
  35. }
  36. publicstaticvoidmain(String[]args)throwsIOException
  37. {
  38. newServer();
  39. }
  40. //---Broadcast
  41. classBroadcastextendsThread
  42. {
  43. publicBroadcast()
  44. {
  45. start();
  46. }
  47. publicvoidrun()
  48. {
  49. while(true)
  50. {
  51. if(!isClear)
  52. {
  53. Stringtmp=(String)Message_Array.getFirst();
  54. for(inti=0;i<Threader.size();i++)
  55. {
  56. CreateServerThreadclient=(CreateServerThread)Threader.get(i);
  57. client.sendMessage(tmp);
  58. }
  59. Message_Array.removeFirst();
  60. isClear=Message_Array.size()>0?false:true;
  61. }
  62. }
  63. }
  64. }
  65. //---CreateServerThread
  66. classCreateServerThreadextendsThread
  67. {
  68. privateSocketclient;
  69. privateBufferedReaderin;
  70. privatePrintWriterout;
  71. privateStringUsername;
  72. publicCreateServerThread(Sockets)throwsIOException
  73. {
  74. client=s;
  75. in=newBufferedReader(newInputStreamReader(client.getInputStream()));
  76. out=newPrintWriter(client.getOutputStream(),true);
  77. out.println("---Welcometothischatroom---");
  78. out.println("Inputyournickname:");
  79. start();
  80. }
  81. publicvoidsendMessage(Stringmsg)
  82. {
  83. out.println(msg);
  84. }
  85. publicvoidrun()
  86. {
  87. try
  88. {
  89. intflag=0;
  90. Thread_Counter++;
  91. Stringline=in.readLine();
  92. while(!line.equals("bye"))
  93. {
  94. if(line.equals("l"))
  95. {
  96. out.println(listOnlineUsers());
  97. line=in.readLine();
  98. continue;
  99. }
  100. if(flag++==0)
  101. {
  102. Username=line;
  103. User_List.add(Username);
  104. out.println(listOnlineUsers());
  105. Threader.add(this);
  106. pushMessage("[<"+Username+"comeonin>]");
  107. }
  108. else
  109. {
  110. pushMessage("<"+Username+">"+line);
  111. }
  112. line=in.readLine();
  113. }
  114. out.println("---Seeyou,bye!---");
  115. client.close();
  116. }
  117. catch(IOExceptione)
  118. {}
  119. finally
  120. {
  121. try
  122. {
  123. client.close();
  124. }
  125. catch(IOExceptione)
  126. {}
  127. Thread_Counter--;
  128. Threader.remove(this);
  129. User_List.remove(Username);
  130. pushMessage("[<"+Username+"left>]");
  131. }
  132. }
  133. privateStringlistOnlineUsers()
  134. {
  135. Strings="-+-Onlinelist-+-1512";
  136. for(inti=0;i<User_List.size();i++)
  137. {
  138. s+="["+User_List.get(i)+"]1512";
  139. }
  140. s+="-+---------------------+-";
  141. returns;
  142. }
  143. privatevoidpushMessage(Stringmsg)
  144. {
  145. Message_Array.addLast(msg);
  146. isClear=false;
  147. }
  148. }
  149. }

以上就是对Java Socket线程的详细介绍。这就是程序运行后,多用户登陆并且输入信息后的屏幕。实现了信息的实时广播。用户输入"l"就可以列出在线人员表。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值