Android网络编程之Socket方式连接

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 }

 

posted @ 2013-05-05 20:54  来杯冰镇魔卡  阅读(378)  评论(0编辑  收藏  举报