Java代码 1. // 访问服务器 2. Socket socket = new Socket("127.0.0.1", 8080); 3. // todo something 4. socket.close(); 5. 6. // 查找网络地址 7. InetAddress.getByName(hostName).getHostAddress()); // 根据主机名得到IP地址 8. InetAddress.getByName(ipAddr).getHostName()); // 根据IP地址得到主机名 9. 10. // 连接具体异常 11. UnknownHostException 12. NoRouteToHostException 13. ConnectException 14. 15. // Socket读写文本数据 16. BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 17. String remoteTime = in.readline(); 18. PrintWriter out = new PrintWriter(socket.getOutputStream(), true); 19. out.print("send message to client \r\n"); 20. out.flush(); 21. 22. // Socket读写二进制数据 23. DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream())); 24. long remoteTime = (long)(in.readUnsignedByte() << 24); 25. DataOutputStream out = new DataOutputStream(socket.getOutputStream(), true); 26. 27. // Socket读写串行化数据 28. ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(socket.getInputStream())); 29. Object o = in.readObject(); 30. if (o instanceof Date) // 验证对象类型 31. ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream(), true); 32. 33. // UDP数据报 34. private final static int PACKET_SIZE = 1024; 35. 36. String host = "EV001B389673DE"; 37. InetAddress serverAddr = InetAddress.getByName(host); 38. DatagramSocket socket = new DatagramSocket(); 39. byte[] buffer = new byte[PACKET_SIZE]; // 分配数据缓冲空间 40. DatagramPacket packet = new DatagramPacket(buffer, PACKET_SIZE, serverAddr, 8080); 41. packet.setLength(PACKET_SIZE-1); // 设置数据长度 42. socket.send(packet); 43. socket.receive(packet); // 接收数据
服务器端: Socket Java代码 1. // 创建ServerSocket 2. ServerSocket serverSocket; 3. Socket clientSocket; 4. 5. serverSocket = new ServerSocket(9999); 6. while ((clientSocket = serverSocket.accept()) != null) { 7. System.out.println("Accept from client " + s.getInetAddress()); 8. s.close(); 9. } 10. 11. // 监听内部网 12. public static final short PORT = 9999; 13. public static final String INSIDE_HOST = "acmewidgets-inside"; // 网络接口名 14. public static final int BACKLOG = 10; // 待发数 15. serverSocket = new ServerSocket(PORT, BACKLOG, InetAddress.getByName(INSIDE_HOST)); 16. 17. // 返回相应对象 18. ServerSocket serverSocket = new ServerSocket(9999);; 19. Socket clientSocket; 20. BufferedReader in = null; 21. PrintWriter out = null; 22. while (true) { 23. clientSocket = serverSocket.accept(); 24. in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream(), "8859_1")); 25. out = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream(), "8859_1"), true); 26. String echoLine; 27. while ((echoLine = in.readLine()) != null) { 28. System.out.println("Read " + echoLine); 29. out.print(echoLine + "\r\n"); 30. } 31. } 32. 以 上例子返回字符串,如果返回二进制,则使用DataOutputStream;返回对象,使用ObjectOutputStream 33. 34. // 处理多客户端 35. 需要 把接收数据的处理放入多线程中 36. public class EchoServerThreaded { 37. public static final int ECHOPORT = 7; 38. public static final int NUM_THREADS = 4; 39. 40. public static void main(String[] av) { 41. new EchoServerThreaded(ECHOPORT, NUM_THREADS); 42. } 43. 44. public EchoServerThreaded2(int port, int numThreads) { 45. ServerSocket servSock; 46. Socket clientSocket; 47. try { 48. servSock = new ServerSocket(ECHOPORT); 49. } catch(IOException e) { 50. throw new RuntimeException("Could not create ServerSocket " + e); 51. } 52. for (int i = 0; i < numThreads; i++) { 53. new Handler(servSock, i).start(); 54. } 55. } 56. } 57. class Handler extends Thread { 58. ServerSocket servSock; 59. int threadNumber; 60. 61. Handler(ServerSocket s, int i) { 62. super(); 63. servSock = s; 64. threadNumber = i; 65. setName("Thread " + threadNumber); 66. } 67. 68. public void run() { 69. while (true) { 70. try { 71. System.out.println(getName() + " waiting"); 72. Socket clientSocket; 73. synchronized (servSock) { 74. clientSocket = servSock.accept(); 75. } 76. System.out.println(getName() + " starting, IP=" + clientSocket.getInetAddress()); 77. BufferedReader is = new BufferedReader(new InputStreamReader( 78. clientSocket.getInputStream())); 79. PrintStream os = new PrintStream(clientSocket.getOutputStream(), true); 80. String line; 81. while ((line = is.readLine()) != null) { 82. os.print(line + "\r\n"); 83. os.flush(); 84. } 85. System.out.println(getName() + " ENDED "); 86. clientSocket.close(); 87. } catch (IOException ex) { 88. System.out.println(getName() + ": IO Error on socket " + ex); 89. return; 90. } 91. } 92. } 93. } 94. 95. // 使用SSL和JSSE保护Web服务器 96. SSLServerSocketFactory ssf = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault(); 97. ServerSocket serverSocket = ssf.createServerSocket(8080); 98. 99. // Log4j 100. Level 级别: DEBUG < INFO < WARN < ERROR < FATAL < OFF 101. Appender: 输 出信息 102. ConsoleAppender: 输出控制台 System.out 103. 104. // 找到网络接口 105. Enumeration list = NetworkInterface.getNetworkInterfaces(); 106. while (list.hasMoreElements()) { 107. NetworkInterface iface = (NetworkInterface)list.nextElement(); 108. System.out.println(iface.getDisplayName()); 109. Enumeration addrs = iface.getInetAddresses(); 110. while (addrs.hasMoreElements()) { 111. InetAddress addr = (InetAddress)addrs.nextElement(); 112. System.out.println(addr); 113. } 114. }