文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2022-06-06 09:36

关注

本文实例讲述了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


<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:orientation="vertical" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
  > 
  <TextView  
  android:id="@+id/TextView01"  
  android:layout_width="fill_parent"  
  android:layout_height="wrap_content"  
  android:text="这里显示接收到服务器发来的信息" 
  /> 
  <EditText  
  android:id="@+id/EditText01"  
  android:text="输入要发送的内容"  
  android:layout_width="fill_parent"  
  android:layout_height="wrap_content"> 
  </EditText> 
  <Button  
  android:id="@+id/Button01" 
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content" 
  android:text="发送" 
  />  
</LinearLayout>

AndroidManifest.xml文件如下


<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
   package="com.yarin.android.Examples_08_04" 
   android:versionCode="1" 
   android:versionName="1.0"> 
  <application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".Activity01" 
         android:label="@string/app_name"> 
      <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 
        <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
    </activity> 
  </application> 
  <uses-permission android:name="android.permission.INTERNET"></uses-permission> 
  <uses-sdk android:minSdkVersion="5" /> 
</manifest>

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


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

您可能感兴趣的文章:Android使用WebSocket实现多人游戏SpringBoot webSocket实现发送广播、点对点消息和Android接收Android中使用WebSocket实现群聊和消息推送功能(不使用WebView)android基于socket的局域网内服务器与客户端加密通信Android实现蓝牙客户端与服务器端通信示例Android使用http协议与服务器通信的实例python服务器与android客户端socket通信实例android利用websocket协议与服务器通信


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯