Android Socket简单用法


Socket通常也称做”套接字“,用于描述IP地址和端口,废话不多说,它就是网络通信过程中端点的抽象表示。值得一提的是,Java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。这是两个封装得非常好的类,使用起来很方便!

下面将首先创建一个SocketServer的类作为服务端如下,该服务端实现了多线程机制,可以在特定端口处监听多个客户请求,一旦有客户请求,Server总是会创建一个服务纯种来服务新来的客户,而自己继续监听。程序中accept()是一个阻塞函数,所谓阻塞性方法就是说该方法被调用后将等待客户的请求,直到有一个客户启动并请求连接到相同的端口,然后accept()返回一个对应于客户的Socket。这时,客户方和服务方都建立了用于通信的Socket,接下来就是由各个Socket分别打开各自的输入、输出流。

  • SocketServer类,服务器实现:
  1. package learn.test;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.IOException;  
  5. import java.io.InputStreamReader;  
  6. import java.io.PrintWriter;  
  7. import java.net.ServerSocket;  
  8. import java.net.Socket;  
  9.   
  10. public class SocketServer {  
  11.   
  12.     ServerSocket sever;  
  13.   
  14.     public SocketServer(int port) {  
  15.         try {  
  16.             sever = new ServerSocket(port);  
  17.         } catch (IOException e) {  
  18.             e.printStackTrace();  
  19.         }  
  20.     }  
  21.   
  22.     public void beginListen() {  
  23.         while (true) {  
  24.             try {  
  25.                 final Socket socket = sever.accept();  
  26.   
  27.                 new Thread(new Runnable() {  
  28.                     public void run() {  
  29.                         BufferedReader in;  
  30.                         try {  
  31.                             in = new BufferedReader(new InputStreamReader(  
  32.                                     socket.getInputStream(), "UTF-8"));  
  33.                             PrintWriter out = new PrintWriter(  
  34.                                     socket.getOutputStream());  
  35.                             while (!socket.isClosed()) {  
  36.                                 String str;  
  37.                                 str = in.readLine();  
  38.                                 out.println("Hello!world!! " + str);  
  39.                                 out.flush();  
  40.                                 if (str == null || str.equals("end"))  
  41.                                     break;  
  42.                                 System.out.println(str);  
  43.                             }  
  44.                             socket.close();  
  45.                         } catch (IOException e) {  
  46.                             e.printStackTrace();  
  47.                         }  
  48.                     }  
  49.                 }).start();  
  50.             } catch (IOException e) {  
  51.                 e.printStackTrace();  
  52.             }  
  53.         }  
  54.     }  
  55. }  

SocketClient类,客户端实现:
  1. public class SocketClient {  
  2.     static Socket client;  
  3.   
  4.     public SocketClient(String site, int port) {  
  5.         try {  
  6.             client = new Socket(site, port);  
  7.             System.out.println("Client is created! site:" + site + " port:"  
  8.                     + port);  
  9.         } catch (UnknownHostException e) {  
  10.             e.printStackTrace();  
  11.         } catch (IOException e) {  
  12.             e.printStackTrace();  
  13.         }  
  14.     }  
  15.   
  16.     public String sendMsg(String msg) {  
  17.         try {  
  18.             BufferedReader in = new BufferedReader(new InputStreamReader(  
  19.                     client.getInputStream()));  
  20.             PrintWriter out = new PrintWriter(client.getOutputStream());  
  21.             out.println(msg);  
  22.             out.flush();  
  23.             return in.readLine();  
  24.         } catch (IOException e) {  
  25.             e.printStackTrace();  
  26.         }  
  27.         return "";  
  28.     }  
  29.   
  30.     public void closeSocket() {  
  31.         try {  
  32.             client.close();  
  33.         } catch (IOException e) {  
  34.             e.printStackTrace();  
  35.         }  
  36.     }  
  37.   
  38.     public static void main(String[] args) throws Exception {  
  39.   
  40.     }  
  41. }  

接下来就是来测试Socket通信了!

先运行TestSocketServer类,打开服务端,在12345端口处监听!

  1. public class TestSocketServer {  
  2.     public static void main(String[] argvs) {  
  3.         SocketServer server = new SocketServer(12345);  
  4.         server.beginListen();  
  5.     }  
  6. }  
  • 1
  • 2
  • 下一页

相关内容