`

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"就可以列出在线人员表。


分享到:
评论

相关推荐

    微信小程序聊天室,基于java、socket

    其中用到了局域网通信机制的原理,通过直接继承Thread类来建立多线程。开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程的设计方法等。在网络编程中对...

    java应用与开发 Java实验,综合应用 运用Java语言的各方面知识解决实际问题,提高综合编程能力

    实验一: 关键词: Java控制语法 内容关键词: 语法控制,Java实验 用途: 学习Java语言的控制语法,掌握基础语法知识。...用途: 学习Java中的网络编程,了解Socket通信原理和实现。 实验七: 关键词: 综合实验(选择)

    基于JAVA的聊天系统的设计与实现

    其中用到了局域网通信机制的原理,通过直接继承Thread类来建立多线程。开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程的设计方法等。在网络编程中对...

    java源码包---java 源码 大量 实例

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    JAVA清华大学教程

    ◇1.2 java的工作原理 ◇1.3 一切都是对象 ◇1.4 构建java程序 ◇1.5 java程序规范 ◇1.6 建立java开发环境 ◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 ...

    java程序设计实验指导代码

    相关内容见《java程序设计实验指导》 清华大学出版社出版 第1章 Java语言概述和开发环境 1.1 预备知识 1.2 实验1 JDK 5.0路径设置 1.3 实验2 在DOS环境下编译和运行Application和Applet程序 1.4 实验3 在JBuilder...

    JAVA 清华大学 教程

    ◇1.2 java的工作原理 ◇1.3 一切都是对象 ◇1.4 构建java程序 ◇1.5 java程序规范 ◇1.6 建立java开发环境 ◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 ...

    基于javatcpsocket通信的拆包和装包源码-NettyTree:网状树

    socket通信的拆包和装包源码 NettyTree 搭建一个基于Netty的通信框架 NIO:非阻塞式IO BIO:阻塞式IO 1) TCP粘包、拆包 2)编解码技术 1)Java序列化 2)业界主流的编解码框架 Thrift Protobuf 3) Websocket 5)...

    JAVA上百实例源码以及开源项目源代码

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    清华大学JAVA教程

    ◇1.2 java的工作原理 ◇1.3 一切都是对象 ◇1.4 构建java程序 ◇1.5 java程序规范 ◇1.6 建立java开发环境 ◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 ...

    JAVA上百实例源码以及开源项目

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    java源码包4

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    java源码包3

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    Java编程语言详细教程

    ◇1.2 java的工作原理 ◇1.3 一切都是对象 ◇1.4 构建java程序 ◇1.5 java程序规范 ◇1.6 建立java开发环境 ◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 ...

    Java毕业设计-基于JAVA的网络通讯系统设计与实现(论文+系统).rar

    * 深入分析了Java网络编程的关键技术,如Socket通信、多线程处理等,并通过实例进行了验证。 * 全面介绍了系统的架构设计、功能模块划分以及数据库设计,展现了系统的高度模块化与可扩展性。 * 对系统的实现过程进行...

    java源码包2

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    Java聊天室程序源码(毕业设计)

    接收用户的聊天信息是由多线程技术实现的,因为客户端必须时时关注更新服务器上是否有最新消息,在本程序中设定的是3秒刷新服务器一次,如果间隔时间太短将会增加客户端与服务器端的通信负担,而间隔时间长就会让人...

    基于Java即时聊天系统的设计与实现毕业论文.pdf

    网通信机制的原理,通过直接继承Thread类来建立多线程。开发中利用了计 算机网络编程的基本理论知识如TCP/IP协议、客户端/服务器端模式 (Client/Server模式)、网络编程的设计方法等。在网络编程中对信息的读 取、...

    端口扫描器的设计与实现(Java).zip

    设计工作计划与进度安排 1.TCP和 Socket原理 4小时 2.程序设计基础知识准备 4小时 3.扫描器的功能和交互界面设计 6小时 4.端口扫描功能的实现 8小时 5.软件测试及完善 2小时 6.课程设计报告 4小时

Global site tag (gtag.js) - Google Analytics