Socket连接方式需要编写服务器端和客户端的程序
服务器端:
实例化一个ServerSocket并赋予端口号 ---> 实例化一个客户端Socket ---> 循环等待客户端socket连接 ---> 取得客户端socket的输入流读取数据 ---> 取得输出流应答客户端
1 public class Server { 2 3 private static boolean flag = true; 4 5 public static void main(String[] args) { 6 ServerSocket serverSocket = 7 null; 8 try { 9 // 启动一个ServerSocket 10 serverSocket = new ServerSocket(9999); 11 Socket client = null; 12 while (flag) { 13 client = serverSocket.accept(); // 接受客户端请求 14 if (client.isConnected()) { 15 System. out.println("connected!" ); 16 } 17 // 取得输入流读取客户端传送的数据,要接收中文只需将编码设置为" gbk" 18 19 BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream(), "gbk" )); 20 21 StringBuffer buffer = new StringBuffer(); 22 buffer.append( "Android:"); 23 buffer.append(br.readLine()); 24 25 // 取得输出流向客户端返回应答数据, 编码要与输入流匹配 26 PrintStream out = new PrintStream(client.getOutputStream(), true, "gbk"); 27 System. out.println(buffer); 28 out.println(buffer); 29 30 // 关掉所有 31 br.close(); 32 out.close(); 33 } 34 client.close(); 35 serverSocket.close(); 36 37 } catch (IOException e) { 38 e.printStackTrace(); 39 } 40 } 41 }
实例化一个Socket并传入服务器端IP与端口号 ---> 取得客户端输出流发出数据给客户端 ---> 取得客户端输入流接受服务器应答数据 ---> 处理数据
Activity准备组件部分:
1 public class MainActivity extends Activity { 2 3 private EditText enterInfoText = null; 4 private TextView socketText = null; 5 private Button connectBtn = null; 6 7 @Override 8 public void onCreate(Bundle savedInstanceState) { 9 super.onCreate(savedInstanceState); 10 setContentView(R.layout. activity_main); 11 12 /*下面两段代码使Android3.0以上系统可以让 http代码使用主UI线程,因为3.0以上系统对UI资源的使用更严格*/ 13 StrictMode. setThreadPolicy(new StrictMode.ThreadPolicy.Builder() 14 .detectDiskReads().detectDiskWrites().detectNetwork() 15 .penaltyLog().build()); 16 17 StrictMode. setVmPolicy(new StrictMode.VmPolicy.Builder() 18 .detectLeakedSqlLiteObjects().penaltyLog() 19 .penaltyDeath().build()); 20 21 enterInfoText = (EditText) findViewById(R.id.enterInfoText); 22 socketText = (TextView) findViewById(R.id.socketText); 23 connectBtn = (Button) findViewById(R.id.connectBtn); 24 25 connectBtn.setOnClickListener(new ConnectionBtnListener()); 26 }
按钮监听方法实现socket连接服务器端:
1 private class ConnectionBtnListener implements OnClickListener { 2 3 @Override 4 public void onClick(View v) { 5 try { 6 String temp = MainActivity.this .enterInfoText.getText().toString(); 7 if (temp == null || temp == "") { 8 MainActivity. this.socketText .setText("请输入内容!"); 9 return; 10 } 11 //准备向服务器端发送信息的socket 12 Socket client = new Socket("172.16.1.210" , 9999); 13 14 // 准备向服务器传数据的PrintWriter, 要传送中文只需将编码设置为" gbk" 15 PrintStream out = new PrintStream(client.getOutputStream(), true, "gbk"); 16 out.println(temp); 17 18 // 准备从服务器端接收回应的BufferedReader, 编码要与输出流匹配 19 BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream(), "gbk" )); 20 //System.out.println(br.readLine()); 21 MainActivity. this.socketText .setText(br.readLine()); 22 23 br.close(); 24 out.close(); 25 client.close(); 26 } catch (UnknownHostException e) { 27 e.printStackTrace(); 28 } catch (IOException e) { 29 e.printStackTrace(); 30 } 31 } 32 33 } 34 35 }