简单的的多人聊天端.docx_第1页
简单的的多人聊天端.docx_第2页
简单的的多人聊天端.docx_第3页
简单的的多人聊天端.docx_第4页
简单的的多人聊天端.docx_第5页
已阅读5页,还剩8页未读 继续免费阅读

VIP免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

简单的的多人聊天端javaJava代码1. packagecgh20130727分部实现多人通信;2. 3. importjava.io.IOException;4. 5. importjavax.swing.JTextArea;6. 7. /*8. *定义一个TestServer的类创建一个服务器9. *authorAllen10. *11. */12. publicclassTestServerextendsThread13. 14. privateintport;15. privateJTextAreajta;16. 17. /构造方法进行参数的传递18. publicTestServer(intport,JTextAreajta)19. this.port=port;20. this.jta=jta;21. 22. /空参数构造方法23. publicTestServer()24. 25. 26. 27. /重写run方法28. publicvoidrun()29. 30. server(port);31. 32. 33. 34. /定义一个创建一个服务器的方法35. publicvoidserver(intport)36. 37. try38. 39. /创建服务器40. .ServerSocketserver=.ServerSocket(port);41. System.out.println(你的服务器创建成功了!rn+端口号:+port);42. 43. while(true)44. 45. /阻塞等待客户端的连接46. .Socketsoclicent=server.accept();47. /创建一个多线程对象48. ServerThreadsth=newServerThread(soclicent,jta);49. sth.start();/线程开始运行50. chatList.add(sth);51. 52. 53. catch(IOExceptione)54. e.printStackTrace();55. 56. 57. 58. 创建一个服务器代码就那么三行,比较固定看看书也就搞定了.但在程序运行的时候遇到了一个bug,就是在已有的界面上(服务器界面)显示的时候点击端口按钮创建服务器对象的时候一直处于运行状态,最后知道了原来是没有添加线程的原因.Java代码1. packagecgh20130727分部实现多人通信;2. 3. importjava.io.BufferedReader;4. importjava.io.IOException;5. importjava.io.InputStreamReader;6. 7. importjavax.swing.JTextArea;8. 9. importcgh20130728多人聊天客户端.customListe;10. 11. /*12. *定义一个客户端对象继承自多线程13. *authorAllen14. *15. */16. publicclassServerThreadextendsThread17. 18. .Socketsoclicent;/定义一个客户端的属性19. privatejava.io.InputStreamins;20. privatejava.io.OutputStreamous;21. privateStringip;22. privateintport;23. privateJTextAreajta;24. 25. /构造方法进行参数的传递26. publicServerThread(.Socketsoclicent,JTextAreajta)27. this.soclicent=soclicent;28. this.jta=jta;29. 30. 31. publicServerThread(Stringip,intport,JTextAreajta)32. this.ip=ip;33. this.port=port;34. this.jta=jta;35. 36. 37. /重写线程run的方法38. publicvoidrun()39. work(this.soclicent);40. 41. 42. /定义从客户端连接到服务器的方法43. publicvoidwork(.Socketsoclicent)44. 45. try46. /客户端接收输入输出流47. ins=soclicent.getInputStream();48. ous=soclicent.getOutputStream();49. 50. /验证是否连接成功51. Stringstr=hello,welcometoLanjie!+rn;52. bytebytes=str.getBytes();53. ous.write(bytes);54. ous.flush();55. 56. /将字符串读到服务器57. StringstrRead=readString(ins);58. /判断当读到exit时停止59. while(!strRead.equals(exit)60. System.out.println(服务器接收到的内容是+rn+strRead);61. Stringsing=客户端保存的内容是-rn+strRead;62. byteby=sing.getBytes();63. /ous.write(by);64. /ous.flush();/强制刷新65. chatList.sendMsg(by);/客户端接收到的消息66. jta.setText(strRead);/将客户端接收到的消息显示在文本框中67. strRead=readString(ins);/下一次得到的字符串68. 69. 70. catch(IOExceptione)71. 72. e.printStackTrace();73. 74. 75. 76. 77. 78. /定义一个读入字符串的方法79. publicStringreadString(java.io.InputStreamins)80. 81. /创建一个字符串缓冲器对象82. StringBufferstrb=newStringBuffer();83. 84. intreads=0;85. 86. /判断当读到回车是停止字符的存入87. while(reads!=35)88. try89. reads=ins.read();/将字符读入到服务器90. strb.append(char)reads);/将读到的字符放入字符串缓冲区91. 92. catch(IOExceptione)93. 94. e.printStackTrace();95. 96. 97. Stringsting=strb.toString().trim();/将缓冲区的字符整合成字符串98. 99. returnsting;100. 101. /定义一个服务器发送消息的方法102. publicvoidwriteMsg(byteby)103. 104. try105. System.out.println(writeMsg执行了);106. ous.write(by);107. ous.flush();108. catch(IOExceptione)109. 110. e.printStackTrace();111. 112. 113. 114. 115. 写该类的时候遇到的一个是:当在程序运行的时候,不管是服务器的界面文本框还是客户端的文本框一直没有显示,纠结了半天最后终于找到原来是没有写该条指令jta.setText(strRead);Java代码1. packagecgh20130727分部实现多人通信;2. 3. importjava.util.ArrayList;4. importjava.util.List;5. 6. /*7. *定义一个chatList的队列类用来存储客户端对象8. *authorAllen9. *10. */11. publicclasschatList12. 13. /定义一个私有的构造方法14. privatechatList()15. 16. 17. 18. /调用系统提供的数组队列19. publicstaticListlist=newArrayList();20. 21. /定义一个数组队列的添加方法22. publicstaticvoidadd(ServerThreadsth)23. list.add(sth);24. 25. 26. 27. /定义一个发送消息的方法28. publicstaticvoidsendMsg(byteby)29. System.out.println(sendMsg执行了);30. /循环遍历数组队列31. for(inti=0;i+nport);71. 72. 73. if(e.getActionCommand().equals(发送)74. /从文本框得到消息75. Stringinfo=jte1.getText();76. /服务器将消息发送给每个客户端77. chatList.sendMsg(info.getBytes();78. /服务器的文本区域得到文本79. jta.append(fuwuqi:rn+info);80. /发送完毕后清空文本框81. jte1.setText();82. System.out.println(服务器发送消息给客户端成功+info);83. 84. 85. 86. 87. ;88. jbu.addActionListener(action);89. jbu1.addActionListener(action);/按钮添加监听器90. /设置窗体可见性91. this.setVisible(true);92. 93. 94. 该类主要是写一个服务器的界面并实现创建服务器,群发消息的方法Java代码1. packagecgh20130727分部实现多人通信1;2. 3. importjava.awt.Dimension;4. importjava.awt.FlowLayout;5. importjava.awt.event.ActionEvent;6. importjava.awt.event.ActionListener;7. 8. importjavax.swing.JButton;9. importjavax.swing.JFrame;10. importjavax.swing.JTextArea;11. importjavax.swing.JTextField;12. 13. importcgh20130727分部实现多人通信.ServerThread;14. importcgh20130727分部实现多人通信.chatList;15. 16. /*17. *创建一个客户端的界面继承自JFrame18. *authorAllen19. *20. */21. publicclassKehuduanUIextendsJFrame22. 23. privateJTextAreajta;24. privateKehuWaykhw;25. /*26. *程序的入口主函数27. *paramargs28. */29. publicstaticvoidmain(Stringargs)30. /实例化一个对象并调用窗体初始化的方法31. KehuduanUIkhd=newKehuduanUI();32. khd.INtUI();33. 34. 35. /初始化一个界面的方法36. publicvoidINtUI()37. 38. this.setTitle(客户端);39. this.setSize(400,300);40. this.setLocationRelativeTo(null);41. this.setResizable(false);42. /设置窗体的流式布局43. this.setLayout(newFlowLayout();44. /创建按钮对象45. JButtonjbu=newJButton(连接);46. JButtonjbu1=newJButton(群聊);47. /创建文本框对象48. JTextFieldjte=newJTextField(25);49. finalJTextFieldjte1=newJTextField(25);50. /创建一个纯文本多行区域51. jta=newJTextArea();52. jta.setPreferredSize(newDimension(350,180);53. /添加到窗体54. this.add(jbu);55. this.add(jte);56. this.add(jbu1);57. this.add(jte1);58. this.add(jta);59. 60. /创建监听器61. ActionListeneraction=newActionListener()62. 63. /调用监听器的方法64. publicvoidactionPerformed(ActionEvente)65. 66. if(e.getActionCommand().equals(连接)67. 68. khw=newKehuWay(localhost,9007,jta);/创建一个客户端对象69. /判断客户端是否创建成功70. if(khw.connectServer()71. khw.start();72. 73. 74. 75. if(e.getActionCommand().equals(群聊)76. Stringstri=jte1.getText();77. jta.append(kehuduan:rn+stri+rn);78. khw.sendInfo(stri);79. jte1.setText();/发完后清空文本框80. 81. 82. 83. 84. 85. ;86. /添加监听器87. jbu.addActionListener(action);88. jbu1.addActionListener(action);89. 90. /显示窗体的可见性91. this.setVisible(true);92. 93. 94. 95. 有了客户端界面就需要有一个服务器的界面.Java代码1. packagecgh20130727分部实现多人通信1;2. 3. importjava.io.BufferedReader;4. importjava.io.IOException;5. 6. importjavax.swing.JTextArea;7. 8. importcgh20130727分部实现多人通信.chatList;9. 10. /*11. *定义客户端方法的类继承自多线程12. *authorAllen13. *14. */15. publicclassKehuWayextendsThread16. 17. privateStringip;18. privateintport;19. privatejava.io.OutputStreamous;20. privatejava.io.InputStreamins;21. privateBufferedReaderbufr;22. privateJTextAreajta;23. privateStringsting;24. privateStringstring=null;25. 26. /构造方法进行参数的传递27. publicKehuWay(Stringip,intport,JTextAreajta)28. this.ip=ip;29. this.port=port;30. this.jta=jta;31. 32. 33. /判断客户端是否与服务器连接成功34. publicbooleanconnectServer()35. 36. try37. /创建连接服务器的对象38. .Socketclient=.Socket(ip,port);39. System.out.println(客户端与服务器连接成功了!);40. /获取输入输出流41. ins=client.getInputStream();42. ous=client.getOutputStream();43. System.out.println(-+);44. returntrue;45. 46. catch(IOExceptione)47. e.printStackTrace();48. 49. returnfalse;50. 51. /客户端发送消息52. publicvoidsendInfo(Stringinfo)53. 54. try55. 56. /info+=rn;57. ous.write(info.getBytes();58. ous.flush();/强制刷新59. 60. catch(IOExceptione)61. 62. e.printStackTrace();63. 64. 65. 66. /客户端接收消息的方法67. publicvoidreadInfo()6

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论