whisper-xp

这两天被这个问题搞得很头疼,本来以为很简单的一个事,结果花了不少时间。

首先是服务器端,很简单的一个等待连接:

 1 package com.mingrisoft;
 2 
 3 import java.awt.BorderLayout;
 4 import java.net.*;
 5 import javax.swing.JFrame;
 6 import javax.swing.JScrollPane;
 7 import javax.swing.JTextArea;
 8 
 9 public class ServerSocketFrame extends JFrame {
10     private JTextArea ta_info;
11     private ServerSocket server; // 声明ServerSocket对象
12     private Socket socket; // 声明Socket对象socket
13     
14     public void getServer() {
15         try {
16             server = new ServerSocket(1992); // 实例化Socket对象
17             ta_info.append("服务器套接字已经创建成功\n"); // 输出信息
18             while (true) { // 如果套接字是连接状态
19                 ta_info.append("等待客户机的连接......\n"); // 输出信息
20                 socket = server.accept(); // 实例化Socket对象
21                 ta_info.append("连接成功......\n");
22             }
23         } catch (Exception e) {
24             e.printStackTrace(); // 输出异常信息
25         }
26     }
27     
28     public static void main(String[] args) { // 主方法
29         ServerSocketFrame frame = new ServerSocketFrame(); // 创建本类对象
30         frame.setVisible(true);
31         frame.getServer(); // 调用方法
32     }
33     
34     public ServerSocketFrame() {
35         super();
36         setTitle("建立服务器套接字");
37         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
38         setBounds(100, 100, 260, 167);
39         
40         final JScrollPane scrollPane = new JScrollPane();
41         getContentPane().add(scrollPane, BorderLayout.CENTER);
42         
43         ta_info = new JTextArea();
44         scrollPane.setViewportView(ta_info);
45     }

46 }

android客户端:

 
 1 package com.wxp.And255;
 2 
 3 import java.io.IOException;
 4 import java.net.InetSocketAddress;
 5 import java.net.ServerSocket;
 6 import java.net.Socket;
 7 import java.net.UnknownHostException;
 8 
 9 import android.os.Bundle;
10 import android.os.Handler;
11 import android.os.StrictMode;
12 import android.annotation.SuppressLint;
13 import android.annotation.TargetApi;
14 import android.app.Activity;
15 import android.view.Menu;
16 import android.view.MenuItem;
17 import android.view.View;
18 import android.view.View.OnClickListener;
19 import android.widget.Button;
20 import android.widget.Toast;
21 import android.support.v4.app.NavUtils;
22 
23 @TargetApi(9)
24 @SuppressLint({ "NewApi", "NewApi", "NewApi", "NewApi", "NewApi", "NewApi" })
25 public class MainActivity extends Activity {
26 
27 
28     private Button con;
29     Socket socket;
30     InetSocketAddress isa=null;
31     @TargetApi(9)
32     @SuppressLint({ "NewApi", "NewApi", "NewApi", "NewApi" })
33     public void onCreate(Bundle savedInstanceState) {
34         super.onCreate(savedInstanceState);       
35         setContentView(R.layout.activity_main);
36        
37         StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
38         .detectDiskReads().detectDiskWrites().detectNetwork()
39         .penaltyLog().build());
40      StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
41         .detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath()
42         .build());
43      
44         con=(Button) findViewById(R.id.button1);
45         con.setOnClickListener(new OnClickListener() {
46             
47             public void onClick(View v) {
48                  
49                  Handler handler=new Handler();
50                  handler.post(socketThread);
51                  
52             }
53         });
54        
55     }
56 
57     Runnable socketThread = new Runnable() {
58         public void run() {
59             
60             try {
61                  
62                 socket=new Socket("192.168.1.100",1992);
63 
64                     Toast.makeText(MainActivity.this, "ok", 3000).show();
65                 }  catch (Exception e) {
66                     // TODO Auto-generated catch block
67                     e.printStackTrace();
68                 }
69         }
70     };
71 
72     
90     @Override
91     public boolean onCreateOptionsMenu(Menu menu) {
92         getMenuInflater().inflate(R.menu.activity_main, menu);
93         return true;
94     }
95 
96     
97 }

 

注意这部分:

setContentView(R.layout.activity_main);               

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()        

.detectDiskReads().detectDiskWrites().detectNetwork()        

.penaltyLog().build());     

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()       

  .detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath()     

    .build());

我也搞不懂为什么,网上说socket连接要在另一个线程里面进行,我试了也没用,后来加了这段就有用了。

 

布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent" >

<Button        

android:id="@+id/button1"        

android:layout_width="wrap_content"        

android:layout_height="wrap_content"        

android:layout_alignBottom="@+id/textView1"       

  android:layout_alignLeft="@+id/textView1"     

    android:text="con" />

</RelativeLayout>

 

暂时就这么多,详细使用下回分解。

分类:

技术点:

相关文章: