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 }
  • 相关阅读:
    保持URL不变和数字验证
    centOS ftp key?
    本地环境测试二级域名
    linux 解决You don't have permission to access 问题
    php smarty section loop
    php header Cannot modify header information headers already sent by ... 解决办法
    linux部分命令
    Linux 里面的文件操作权限说明
    用IT网络和安全专业人士视角来裁剪云的定义
    SQL Server 2008 R2炫酷报表"智"作有方
  • 原文地址:https://www.cnblogs.com/moka/p/3061487.html
Copyright © 2011-2022 走看看