栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android编程之客户端通过socket与服务器通信的方法

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android编程之客户端通过socket与服务器通信的方法

本文实例讲述了Android编程之客户端通过socket与服务器通信的方法。分享给大家供大家参考,具体如下:

下面是一个demo,Android客户端通过socket与服务器通信。

由于Android里面可以完全使用java.io.*包和java.net.*包,那么,实际上,逻辑部分与J2SE没有区别。只是UI代码不一样。

Android客户端通过socket与服务器通信分为下面5步:

(1)通过IP地址和端口实例化Socket,请求连接服务器;
复制代码 代码如下:socket = new Socket("10.14.114.127",54321); //IP:10.14.114.127,端口54321
(2)获取Socket流以进行读写,并把流包装进BufferWriter或者PrintWriter
复制代码 代码如下:PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
这里涉及了三个类:socket.getOutputStream得到socket的输出字节流,OutputStreamWriter是字节流向字符流转换的桥梁,BufferWriter是字符流,然后再包装进PrintWriter。

(3)对Socket进行读写
复制代码 代码如下:out.println(message);
(4)关闭打开的流
复制代码 代码如下:out.close();
完整工程代码如下:

package com.yarin.android.Examples_08_04; 
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.net.Socket; 
import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
public class Activity01 extends Activity 
{ 
  private final String    DEBUG_TAG  = "Activity01"; 
  private TextView  mTextView = null; 
  private EditText  mEditText = null; 
  private Button   mButton = null; 
   
  @Override 
  public void onCreate(Bundle savedInstanceState) 
  { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    mButton = (Button)findViewById(R.id.Button01); 
    mTextView = (TextView)findViewById(R.id.TextView01); 
    mEditText = (EditText)findViewById(R.id.EditText01); 
    //登陆 
    mButton.setonClickListener(new onClickListener() 
    { 
      public void onClick(View v) 
      { 
 Socket socket = null; 
 String message = mEditText.getText().toString() + "/r/n";  
 try  
 {   
   //创建Socket 
//  socket = new Socket("192.168.1.110",54321);  
   socket = new Socket("10.14.114.127",54321); //IP:10.14.114.127,端口54321 
   //向服务器发送消息 
   PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);    
   out.println(message);  
   //接收来自服务器的消息 
   BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
   String msg = br.readLine();  
   if ( msg != null ) 
   { 
     mTextView.setText(msg); 
   } 
   else 
   { 
     mTextView.setText("数据错误!"); 
   } 
   //关闭流 
   out.close(); 
   br.close(); 
   //关闭Socket 
   socket.close();  
 } 
 catch (Exception e)  
 { 
   // TODO: handle exception 
   Log.e(DEBUG_TAG, e.toString()); 
 } 
      } 
    }); 
  } 
}

布局文件main.xml

 
 
   
   
   
  

AndroidManifest.xml文件如下

 
 
  
     
       
  
  
       
     
   
   
   


当然,还有服务器端得代码

package com.yarin.android.Examples_08_04; 
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 
public class Server implements Runnable 
{ 
  public void run() 
  { 
    try 
    { 
      //创建ServerSocket 
      ServerSocket serverSocket = new ServerSocket(54321); 
      while (true) 
      { 
 //接受客户端请求 
 Socket client = serverSocket.accept(); 
 System.out.println("accept"); 
 try 
 { 
   //接收客户端消息 
   BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
   String str = in.readLine(); 
   System.out.println("read:" + str);  
   //向服务器发送消息 
   PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(client.getOutputStream())),true);    
   out.println("server message");  
   //关闭流 
   out.close(); 
   in.close(); 
 } 
 catch (Exception e) 
 { 
   System.out.println(e.getMessage()); 
   e.printStackTrace(); 
 } 
 finally 
 { 
   //关闭 
   client.close(); 
   System.out.println("close"); 
 } 
      } 
    } 
    catch (Exception e) 
    { 
      System.out.println(e.getMessage()); 
    } 
  } 
  //main函数,开启服务器 
  public static void main(String a[]) 
  { 
    Thread desktopServerThread = new Thread(new Server()); 
    desktopServerThread.start(); 
  } 
}

先开启服务器代码

java  Server即可

然后启动android模拟器。运行结果

这是Android客户端。输入12345,点击发送:

这是服务器端收到的消息

希望本文所述对大家Android程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/163964.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号