zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    ubuntu root 登录没有声音(waiting for sound system to respond)
    android openVG source prj
    http://source.android.com/ android官网(下载源码及sdk)
    8个优秀的Android开源游戏引擎
    2010開放原始碼創新應用開發大賽 (有很好的源码)
    GIT和repo使用方法:下载内核 android源码包
    Real6410系列教程 android
    [转]Protel布局文件转化为Allegro placement文件
    ubuntu网卡设置
    ubuntu 下安装java6的源
  • 原文地址:https://www.cnblogs.com/moka/p/3061487.html
Copyright © 2011-2022 走看看