client.java
上传用户:hongdaled
上传日期:2007-10-03
资源大小:680k
文件大小:4k
源码类别:

ICQ/即时通讯

开发平台:

Java

  1. package server;
  2. import java.io.DataInputStream;
  3. import java.io.DataOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.IOException;
  7. import java.io.ObjectInputStream;
  8. import java.io.ObjectOutputStream;
  9. import java.net.Socket;
  10. import java.util.ArrayList;
  11. import java.util.Date;
  12. import java.util.HashMap;
  13. import java.util.HashSet;
  14. import java.util.Iterator;
  15. import java.util.Map;
  16. import java.util.Properties;
  17. import java.util.TreeSet;
  18. class client extends Thread {
  19. int id;
  20. ObjectOutputStream dos;
  21. // 去往客户的输出流
  22. ObjectInputStream din;
  23. // 来自客户的输入流
  24. Socket s;
  25. private Object key;
  26. public client(int id, ObjectOutputStream dos, ObjectInputStream din,
  27. Socket s) {
  28. this.s = s;
  29. this.id = id;
  30. this.dos = dos;
  31. this.din = din;
  32. }
  33. public void run() {
  34. // 循环读取客户数据转发给其他客户
  35. while (true) {
  36. try {
  37. Object oo = din.readObject();
  38. int m = serverthread.clientnum;
  39. // 读客户数据,无数据时线程将挂起
  40. if (oo instanceof ArrayList) {
  41. ArrayList user = (ArrayList) oo;
  42. if (user.size() > 3) {
  43. qq_user qq = new qq_user();
  44. qq.name = user.get(0).toString();
  45. qq.passward = user.get(1).toString();
  46. qq.sex = Integer.parseInt(user.get(2).toString());
  47. qq.info = user.get(3).toString();
  48. System.out.println(qq);
  49. HashMap set = readtext.read();
  50. System.out.println(set);
  51. set.put(qq.name, qq);
  52. System.out.println(qq.name);
  53. readtext.write(set);
  54. } else {
  55. // String message=user.get(0);
  56. // System.out.println(message);
  57. client c;
  58. for (int j = 0; j < serverthread.l.size(); j++) {
  59. c = (client) serverthread.l.get(j);
  60. c.dos.writeObject(user);
  61. // 转发给其他客户
  62. }
  63. }
  64. }
  65. if (oo instanceof String) {
  66. String log = (String) oo;
  67. String[] arr = log.split(":");
  68. HashMap set = readtext.read();
  69. System.out.println(log);
  70. Object user = set.get(arr[0]);
  71. qq_user qb = (qq_user) user;
  72. if (user != null && qb.passward.equals(arr[1].toString())) {
  73. client b = (client) serverthread.l.get(m - 1);
  74. String str = b.s.getInetAddress().toString();
  75. System.out.println("                ggggggggggggggggggg");
  76. System.out.println(str);
  77. String stt = str + ":" + arr[2];
  78. dos.writeObject("login");
  79. serverstart.map.put(arr[0], stt);
  80. ArrayList l = new ArrayList();
  81. Object[] arr1 = serverstart.map.keySet().toArray();
  82. String[] ss1 = new String[arr1.length];
  83. for (int j = 0; j < arr1.length; j++) {
  84. ss1[j] = serverstart.map.get(arr1[j].toString())
  85. .toString();
  86. l.add(arr1[j] + ":" + ss1[j]);
  87. }
  88. client c;
  89. for (int j = 0; j < serverthread.l.size(); j++) {
  90. c = (client) serverthread.l.get(j);
  91. c.dos.writeObject(l);
  92. }
  93. } else {
  94. System.out.println("登入失败");
  95. dos.writeObject("shibai");
  96. }
  97. }
  98. if (oo instanceof TreeSet) {
  99. TreeSet hs = (TreeSet) oo;
  100. Iterator itr = hs.iterator();
  101. String ss;
  102. ss = (String) itr.next();
  103. if (ss.charAt(0) == '*') {
  104. serverstart.map.remove(ss.substring(1, ss.length()));
  105. } else if (ss.charAt(0) == '?') {
  106. serverstart.map.remove(ss.substring(1, ss.length()));
  107. // s.close();
  108. } else {
  109. String s0 = (String) itr.next();
  110. String s1 = (String) itr.next();
  111. serverstart.map.put(ss.substring(1, ss.length()), s0
  112. .substring(1, s0.length())
  113. +":"+ s1.substring(1, s1.length()));
  114. }
  115. ArrayList l = new ArrayList();
  116. Object[] arr1 = serverstart.map.keySet().toArray();
  117. String[] ss1 = new String[arr1.length];
  118. for (int j = 0; j < arr1.length; j++) {
  119. ss1[j] = serverstart.map.get(arr1[j].toString())
  120. .toString();
  121. l.add(arr1[j] + ":" + ss1[j]);
  122. }
  123. client c;
  124. for (int j = 0; j < serverthread.l.size(); j++) {
  125. c = (client) serverthread.l.get(j);
  126. c.dos.writeObject(l);
  127. }
  128. }
  129. } catch (IOException e) {
  130. } catch (ClassNotFoundException e) {
  131. // TODO Auto-generated catch block
  132. e.printStackTrace();
  133. }
  134. }
  135. }
  136. }