歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> JAVA 多線程實現聊天(UDP通信 )

JAVA 多線程實現聊天(UDP通信 )

日期:2017/3/1 11:16:35   编辑:Linux編程
JAVA 多線程實現聊天(UDP通信 )
  1. /*
  2. * UDP實現相互傳遞消息
  3. *
  4. */
  5. import java.io.BufferedReader;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. import java.net.DatagramPacket;
  9. import java.net.DatagramSocket;
  10. import java.net.InetAddress;
  11. /*
  12. * 客服端/發送端
  13. */
  14. class Send implements Runnable{
  15. private DatagramPacket dPacket;
  16. private DatagramSocket dSocket;
  17. public Send(DatagramSocket dSocket)
  18. {
  19. this.dSocket=dSocket;
  20. }
  21. @Override
  22. public void run() {
  23. // TODO Auto-generated method stub
  24. try {
  25. BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));//從鍵盤讀取數據
  26. String string;
  27. while ((string=bufferedReader.readLine())!=null) {//循環讀取
  28. if (string.equals("Bye"))
  29. {
  30. System.err.println("我下線了");
  31. System.exit(0);
  32. }
  33. byte []buf=string.getBytes();//將輸入的字符串轉換為字節數組
  34. /*
  35. * 獲取本機IP(外網IP,我是發送到本機IP,也可以試試其它IP),然後從本機端口號為18888的端口發送出去
  36. */
  37. String IP=InetAddress.getLocalHost().getHostAddress().toString();
  38. dPacket=new DatagramPacket(buf, buf.length, InetAddress.getByName(IP), 18888);
  39. dSocket.send(dPacket);
  40. }
  41. } catch (Exception e) {
  42. // TODO: handle exception
  43. System.err.println("發送數據失敗");
  44. e.printStackTrace();
  45. }
  46. }
  47. }
  48. /*
  49. *服務器/ 接受端
  50. */
  51. class Recive implements Runnable{
  52. private DatagramPacket dPacket;
  53. private DatagramSocket dSocket;
  54. public Recive(DatagramSocket dSocket)
  55. {
  56. this.dSocket=dSocket;
  57. }
  58. @Override
  59. public void run() {
  60. // TODO Auto-generated method stub
  61. while (true) {
  62. byte[] buf=new byte[1024];
  63. dPacket=new DatagramPacket(buf, buf.length);
  64. try {
  65. dSocket.receive(dPacket);
  66. String IP=dPacket.getAddress().getHostAddress();
  67. String data=new String(dPacket.getData(), 0, dPacket.getLength());
  68. int portString=dPacket.getPort();
  69. System.out.println("IP:"+IP+"端口:"+portString+"\n"+data);
  70. } catch (IOException e) {
  71. // TODO Auto-generated catch block
  72. e.printStackTrace();
  73. }
  74. }
  75. }
  76. }
  77. public class test {
  78. /**
  79. * @param args
  80. */
  81. public static void main(String[] args) throws Exception{
  82. // TODO Auto-generated method stub
  83. new Thread(new Send(new DatagramSocket())).start();
  84. new Thread(new Recive(new DatagramSocket(18888))).start();
  85. }
  86. }
Copyright © Linux教程網 All Rights Reserved