本文实例讲述了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;   /** Called when the activity is first created. */   @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

<?xml version="1.0" encoding="utf-8"?>             

AndroidManifest.xml文件如下

<?xml version="1.0" encoding="utf-8"?>                                                       

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

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程序设计有所帮助。

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 万字长文带你了解最常用的开源 Squid 代理服务器
  3. Nginx系列教程(一)| 手把手教你在Linux环境下搭建Nginx服务
  4. Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理
  5. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  6. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  7. android反编译和防止反编译的方法
  8. Android(安卓)HttpClient Session保持
  9. Gradle(一)基本概念

随机推荐

  1. mysql 5.7以上版本下载及安装图文教程
  2. MySQL嵌套事务所遇到的问题
  3. 记一次因线上mysql优化器误判引起慢查询
  4. MySql Sql 优化技巧分享
  5. 利用ssh tunnel链接mysql服务器的方法
  6. mysql 全文检索中文解决方法及实例代码
  7. 浅谈mysql可有类似oracle的nvl的函数
  8. 浅谈Mysql中类似于nvl()函数的ifnull()函
  9. Window下Mysql忘记root密码怎么重置
  10. 一次Mysql死锁排查过程的全纪录