iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android中Socket的应用分析
  • 809
分享到

Android中Socket的应用分析

socketAndroid 2022-06-06 07:06:53 809人浏览 泡泡鱼
摘要

本文实例分析了Android中Socket的应用。分享给大家供大家参考,具体如下: Android 提供的常用的网络编程包括针对tcp/IP协议的Socket通信。Socket

本文实例分析了AndroidSocket的应用。分享给大家供大家参考,具体如下:

Android 提供的常用的网络编程包括针对tcp/IP协议的Socket通信。Socket是一种跨平台的编程方式,可以在异构语言之间进行通信。

Socket程序的开发原理,是要实现服务器端和客户端。

服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。

客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。

下面是一个实现socket的例子:

服务器端代码:


package com.socket;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Main {
  private int ServerPort = 9999;
  private ServerSocket serversocket = null;
  private OutputStream outputStream = null;
  private InputStream inputStream = null;
  private PrintWriter printWinter = null;
  private Socket socket = null;
  private BufferedReader reader = null;
  public Main(){
    try{
      serversocket = new ServerSocket(ServerPort);
      System.out.println("服务启动。。。");
      socket = serversocket.accept();
      System.out.println("客户已连接");
    }catch(Exception ex){
      ex.printStackTrace();
    }
    try{
      outputStream= socket.getOutputStream();
      inputStream = socket.getInputStream();
      printWinter = new PrintWriter(outputStream,true);
      reader = new BufferedReader(new InputStreamReader(inputStream));
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      while (true){
        String message = reader.readLine();
        System.out.println("client:"+message);
        if(message.equals("bye")||message.equals("Bye")){
          break;
        }
        message = in.readLine();
        printWinter.println(message);
      }
      outputStream.close();
      inputStream.close();
      socket.close();
      serversocket.close();
      System.out.print("Client is disconnected");
    }catch(Exception e){
      e.printStackTrace();
    }finally{
    }
  }
  public static void main(String[] args){
    new Main();
  }
}

客服端代码:


package com.Aina.Android;
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.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Test extends Activity implements Runnable {

private TextView tv_msg = null;
private EditText ed_msg = null;
private Button btn_send = null;
private Button btn_login = null;
private static final String HOST = "192.168.0.132";
private static final int PORT = 9999;
private Socket socket = null;
private BufferedReader in = null;
private PrintWriter out = null;
private String content = "";
@Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 tv_msg = (TextView) this.findViewById(R.id.TextView);
 ed_msg = (EditText) this.findViewById(R.id.EditText01);
 btn_login = (Button) this.findViewById(R.id.Button01);
 btn_send = (Button) this.findViewById(R.id.Button02);
 try {
  socket = new Socket(HOST, PORT);
  in = new BufferedReader(new InputStreamReader(socket
   .getInputStream()));
  out = new PrintWriter(new BufferedWriter(
   new OutputStreamWriter(socket.getOutputStream())),
   true);
 } catch (Exception ex) {
  ex.printStackTrace();
  ShowDialog("登陆异常:" + ex.getMessage());
 }
 btn_send.setOnClickListener(new Button.OnClickListener() {
  public void onClick(View v) {
  // TODO Auto-generated method stub
  String msg = ed_msg.getText().toString();
  if (socket.isConnected()) {
   if (!socket.isOutputShutdown()) {
   out.println(msg);
   }
  }
  }
 });
 new Thread(this).start();
}
public void ShowDialog(String msg) {
 new AlertDialog.Builder(this).setTitle("提示").setMessage(msg)
  .setPositiveButton("OK", new DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog, int which) {
   // TODO Auto-generated method stub
   }
  }).show();
}
public void run() {
 try {
  while (true) {
  if(socket.isConnected()){
   if(!socket.isInputShutdown()){
   if ((content = in.readLine()) != null) {
    Log.i("TAG", "++ "+content);
    content += "\n";
    mHandler.sendMessage(mHandler.obtainMessage());
   }else{
   }
   }
  }
  }
 } catch (Exception ex) {
  ex.printStackTrace();
 }
}
public Handler mHandler = new Handler() {
 public void handleMessage(Message msg) {
  super.handleMessage(msg);
  Log.i("TAG", "-- "+msg);
  tv_msg.setText(tv_msg.getText().toString() + content);
 }
};
}

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/TextView" android:singleLine="false"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content" />
<EditText android:hint="content" android:id="@+id/EditText01"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content">
</EditText>
<Button android:text="login" android:id="@+id/Button01"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content">
</Button>
<Button android:text="send" android:id="@+id/Button02"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content">
</Button>
</LinearLayout>

先启动服务器端,再运行客户端程序。

注意:

(一)即使服务器端和客户端在一台机器上运行,也不能使用ip地址:127.0.0.1,否则,程序会出现拒绝连接的错误。

(二)客户端和服务器端最好不要建在一个工程下,最好是分别建立工程,然后启动服务器端和客户端,否则会报Error: ShouldNotReachHere()错误。这是因为Android程序不是已main方法为程序的入口。

运行效果:

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android通信方式总结》、《Android调试技巧与常见问题解决方法汇总》、《Android开发入门与进阶教程》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

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

您可能感兴趣的文章:android通过配置文件设置应用安装到SD卡上的方法Android应用 坐标系详细介绍Android编程之重力感应用法分析Android仿百度谷歌搜索自动提示框AutoCompleteTextView简单应用示例Android 动画之TranslateAnimation应用详解Android 动画之RotateAnimation应用详解Android TabWidget切换卡的实现应用Android判断当前应用程序处于前台还是后台的两种方法Android开发笔记之:用Enum(枚举类型)取代整数集的应用详解Android 应用的安装过程详解


--结束END--

本文标题: Android中Socket的应用分析

本文链接: https://www.lsjlt.com/news/23589.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android中ContentProvider基础应用的示例分析
    小编给大家分享一下Android中ContentProvider基础应用的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、适用场景ContentProv...
    99+
    2023-06-22
  • Android应用中apk反编译的示例分析
    这篇文章将为大家详细讲解有关Android应用中apk反编译的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。概述这里是Mac环境,如果是window环境的同学,在环境搭建和工具上可以选择Windo...
    99+
    2023-06-15
  • PHP中SOCKET编程的示例分析
    这篇文章主要介绍了PHP中SOCKET编程的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 预备知识一直以来很少看到有多少人使用php的socket模块来做一些事...
    99+
    2023-06-15
  • Android WebView基础应用的示例分析
    小编给大家分享一下Android WebView基础应用的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、WebView的基础配置WebSettings ws = getS...
    99+
    2023-06-22
  • Socket通信的示例分析
    这篇文章将为大家详细讲解有关Socket通信的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 建立网络通信...
    99+
    2023-06-27
  • 如何分析Linux系统中的socket编程
    这篇文章跟大家分析一下“如何分析Linux系统中的socket编程”。内容详细易懂,对“如何分析Linux系统中的socket编程”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“如...
    99+
    2023-06-28
  • android 如何分析应用的内存(十三)——perfetto
    android 如何分析应用的内存(十三) 本篇文章是native内存的最后一篇文章——perfetto perfetto简介 从2018年始,android开发者峰会正式推出perfetto工具。从...
    99+
    2023-09-20
    perfetto heap_profile heap_profile反混淆 heap_profile符号化 android内存分析
  • linux中socket编程常用头文件的示例分析
    这篇文章给大家分享的是有关linux中socket编程常用头文件的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。sys/types.h:数据类型定义sys/socket.h:提供socket函数及数据结构...
    99+
    2023-06-09
  • VB.NET Socket编程的示例分析
    小编给大家分享一下VB.NET Socket编程的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!下面通过例子来学习VB.NET Socket编程类的应用,下面的程序分别分服务器和客户端两部分:ImportsSyst...
    99+
    2023-06-17
  • MySQL中socket文件被删除的原因分析
    这篇文章主要介绍了MySQL中socket文件被删除的原因分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。登陆数据库发现首先说明: 这个文...
    99+
    2024-04-02
  • SOCKET之多线程的示例分析
    这篇文章主要介绍了SOCKET之多线程的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。多线程的原理图:可以理解成成10086的多个客...
    99+
    2024-04-02
  • Android中ANR的示例分析
    这篇文章将为大家详细讲解有关Android中ANR的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Android ANR(Application Not Responding)的分析ANR (Ap...
    99+
    2023-05-30
    android anr
  • Android中FrameLayout的示例分析
    这篇文章将为大家详细讲解有关Android中FrameLayout的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。概述       FrameLayout以...
    99+
    2023-06-29
  • Android中EventBus的示例分析
    这篇文章将为大家详细讲解有关Android中EventBus的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。展示效果 添加EventBus导入依赖compile 'org.gre...
    99+
    2023-05-30
    android eventbus
  • 深入浅析Android应用中的多进程
    这篇文章将为大家详细讲解有关深入浅析Android应用中的多进程,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。android:process应用实现多进程需要依赖于android:proce...
    99+
    2023-05-31
    android roi 多进程
  • socket的io怎么应用
    今天就跟大家聊聊有关socket的io怎么应用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Socket.IO支持及时、双向与基于事件的交流。它可以...
    99+
    2024-04-02
  • Android应用图标上小红点Badge的示例分析
    这篇文章给大家分享的是有关Android应用图标上小红点Badge的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果图:直接上代码吧,代码中有注释:直接上代码吧,代码中有注释:BadgeUtil类:pu...
    99+
    2023-05-30
    android
  • Android中的存储实例分析
    本文小编为大家详细介绍“Android中的存储实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android中的存储实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、存储在App内部最简单的一种。...
    99+
    2023-06-26
  • Android中ANR的分析和解决
    一、认识ANR ANR的定义 ANR,是“Application Not Responding”的缩写,即“应用程序无响应”。如果你应用程序在UI线程被阻塞太长时间,就会出现ANR,通常出现ANR,...
    99+
    2023-09-26
    Framework Android
  • React中的Context应用场景分析
    Context定义和目的 Context 提供了一种在组件之间共享数据的方式,而不必显式地通过组件树的逐层传递 props。 应用场景 哪些数据会需要共享? Context 设计目...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作