android socket通信(下)

Android TCP socket通信 转载请注明出处:http://blog.youkuaiyun.com/vnanyesheshou/article/details/74896575 之前做过的一个局域网内TCP通信、聊天的demo,周日整理了一下。该demo可以做客户端,也可以做服务端。两个手机都安装该应用,一个做客户端、一个做服务端,然后进行通信(前提连接在同一局域网内)。1 简介TCP(Transmission Control Protoco 阅读详情

android socket通信(下)



在android socket通信(上),我们完成了一个模拟器上运行的android socket通信实例程序:

http://blog.youkuaiyun.com/htttw/article/details/7574372



今天我们将它移植到真实的android手机上,不过要先确保环境配置正确,请参考上一讲。



主机的lwan0的ip地址是路由器自动分配的:192.168.1.100,android手机的ip地址是路由器自动分配的:192.168.1.101,可以在主机上ping手机,理论上是通的,不过很奇怪,我经常会碰到ping不通的情况,然后我在android手机里装了一个模拟终端,ping主机,一般都是通的,难道是android手机的问题?




下面直接上代码,和上一讲的代码基本没有差别,改动的部分如下:

1.

ip地址修改过了

2.

端口由9400改为了9500(呵呵,这是任意的,不改也可以的)



2.

src/RealclientActivity.java

package real.client.com;

import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class RealclientActivity extends Activity
{
  /* 服务器地址 */
  private final String SERVER_HOST_IP = "192.168.1.100";

  /* 服务器端口 */
  private final int SERVER_HOST_PORT = 9500;
  
  private Button btnConnect;
  private Button btnSend;
  private EditText editSend;
  private Socket socket;
  private PrintStream output;


  public void toastText(String message)
  {
    Toast.makeText(this, message, Toast.LENGTH_LONG).show();
  }

  public void handleException(Exception e, String prefix)
  {
    e.printStackTrace();
    toastText(prefix + e.toString());
  }

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    initView();

    btnConnect.setOnClickListener(new Button.OnClickListener()
    {
      @Override
      public void onClick(View v)
      {
        initClientSocket();
      }
    });
    
    btnSend.setOnClickListener(new Button.OnClickListener()
    {
      @Override
      public void onClick(View v)
      {
        sendMessage(editSend.getText().toString());
      }
    });
  }
  
  public void initView()
  {
    btnConnect = (Button)findViewById(R.id.btnConnect);
    btnSend = (Button)findViewById(R.id.btnSend);
    editSend = (EditText)findViewById(R.id.sendMsg);

    btnSend.setEnabled(false);
    editSend.setEnabled(false);
  }

  public void closeSocket()
  {
    try
    {
      output.close();
      socket.close();
	}
    catch (IOException e)
    {
      handleException(e, "close exception: ");
	}
  }
  
  private void initClientSocket()
  {
    try
    {
      /* 连接服务器 */
      socket = new Socket(SERVER_HOST_IP, SERVER_HOST_PORT);

      /* 获取输出流 */
      output = new PrintStream(socket.getOutputStream(), true, "utf-8");
      
      btnConnect.setEnabled(false);
      editSend.setEnabled(true);
      btnSend.setEnabled(true);
    }
    catch (UnknownHostException e)
    {
      handleException(e, "unknown host exception: " + e.toString());
    }
    catch (IOException e)
    {
      handleException(e, "io exception: " + e.toString());
    }
  }
  
  private void sendMessage(String msg)
  {
    output.print(msg);
  }
}


layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <Button
        android:id="@+id/btnConnect"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/connect" />

    <EditText
        android:id="@+id/sendMsg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="text" />

    <Button
        android:id="@+id/btnSend"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/send" />

</LinearLayout>



不要忘了,在AndroidManifest.xml中添加访问网络权限:
<uses-permission android:name="android.permission.INTERNET" />



把上面的代码编译并下载到手机中



3.

服务器端的代码,用c++实现:

server.c

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

#define PORT 9500
#define MAX_BUFFER 1024


int main()
{
  /* create a socket */
  int server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
  
  struct sockaddr_in server_addr;
  server_addr.sin_family = AF_INET;
  server_addr.sin_addr.s_addr = inet_addr("192.168.1.100");
  server_addr.sin_port = htons(PORT);
  
  /* bind with the local file */
  bind(server_sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
  
  /* listen */
  listen(server_sockfd, 5);
  
  int size;
  char buffer[MAX_BUFFER + 1];
  int client_sockfd;
  struct sockaddr_in client_addr;
  socklen_t len = sizeof(client_addr);
  
  /* accept a connection */
  printf("waiting connection...\n");
  client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_addr, &len);
  printf("connection established!\n");
    
  while(1)
  {
    printf("waiting message...\n");
    
    /* exchange data */
    size = read(client_sockfd, buffer, MAX_BUFFER);
    buffer[size] = '\0';
    printf("Got %d bytes: %s\n", size, buffer);
  }

  /* close the socket */
  close(client_sockfd);
      
  return 0;
}



Makefile:

all: server.c
	gcc -g -Wall -o server server.c

clean:
	rm -rf *.o server


4.
运行结果:






代码不过多解释了,注释挺详细的,有关pc机上的tcp通信,可以参考:

http://blog.youkuaiyun.com/htttw/article/details/7519964



最后,我把这个服务器和客户端两个程序都上传上来,供大家下载:

http://download.youkuaiyun.com/detail/htttw/4307666





安卓Socket与pc端c#服务器的通信 附完整代码 一、前言小生不才,学习安卓socke通信打了很多滚,遇到过很多问题,也翻过前辈们关于socket的讲解,很杂各有见解,案例也不是很完整,于是特地将此安卓Socket与pc端c#服务器的通信代码讲解与socket的资料整理一遍加深理解,希望能有所帮助,小生没写过几次博客,欢迎各位大佬提出宝贵意见。安卓客户端项目源代码与pc端C#服务器与客户端的资源已经上传:安卓Socket与pc端c#服务器的通信完... 阅读详情

相关推荐

实现一个SOCKET通转USB通信的安卓程序

该代码片段中,我们获取了已连接到安卓设备的 USB 设备列表,并迭代遍历每个设备。其次,编写服务端程序通过 USB 连接到计算机。在安卓设备上使用 USB 连接,需要使用 Android 提供的 UsbManager 类。实现一个从 Socket 到 USB 的通信需要在安卓设备上编写两个程序,一个作为客户端连接到 Socket,另一个作为服务端通过 USB 连接到计算机。该代码片段中,我们建立了一个与指定 IP 地址和端口号的 Socket 服务器的连接,并向其发送了一个字节流消息。

走向CTO的路上... 634

Android 端口号使用

Android 端口号使用

u013168615的专栏 4626

Android 安卓手机与电脑Socket通信实践教程

简介:在Android平台上,实现手机与电脑的Socket通信对于远程控制、数据传输等场景尤为重要。本文将详细指导如何通过Socket连接安卓设备与PC,并进行双向数据交换。包括服务器端与客户端的实现、数据传输过程及注意事项,还会涉及源码分析和安全性的考虑。

weixin_42591413的博客 1249

Android中LocalSocket实战

网上LocalSocket的知识可以搜到你读不完,所以它的知识本文就不介绍了。本文着重的是自己在实际使用中遇到的问题。 虽然早就经过各种代码洗礼,但是对于LocalSocket这方面还是第一次用到。但是咱不怕,发挥程序猿顶着油锅也要上的精神。巴拉巴拉把LocalSocket的基本知识过了一边。 看了看在Android中怎么用的,以及代码怎么写的。 还是先说一下背景吧,否则会凌乱哈。 本人需

小马过河的专栏 2253

安卓与电脑间Socket通信实战代码解析

本文还有配套的精品资源,点击获取 简介:源码编号 MF00027 展示了安卓设备与计算机如何通过Socket进行数据交互。通信基于TCP/IP,涉及Socket概念、TCP与UDP协议,以及在Android平台上的实现。本例详细讲解了从创建连接到数据传输的完整过程,包括服务器端与客户端的设置、数据传输、异常处理、安全性与性能优化,以及可能的应用场景。开发者通过源码学习,可以...

weixin_42612804的博客 879

半导体AMHS天车振动控制:从0.5G到超低振动的技术演进与工程实战

在先进晶圆厂中,自动化物料搬运系统(AMHS)的天车如同空中出租车,承担着晶圆盒(FOUP)在洁净室各工艺区间的转运任务。然而,当天车加减速、过弯或抓取时产生的机械振动通过轨道梁和建筑结构传递至光刻机等敏感设备,便可能直接威胁套刻精度与良率。传统被动减振方案依靠橡胶垫和弹簧,在0.5G指标时代曾行之有效,但在EUV光刻和先进制程面前已力不从心。主动振动控制技术通过传感器、控制器与作动器构成的闭环系统,在轨道吊点和机械手端实时输出反向力抵消振动,配合磁悬浮走行、轻量化结构及调度系统的路径优化,将振动从0.5G

weixin_29188043的博客 345

android 模拟器与手机的sock通信

android实现模拟器与手机的sock通信前提设备:wifi的无线路由器,使手机与模拟器在同一个的局域网 需使模拟器重映射电脑的的端口号,步骤如下: 打开模拟器;电脑cmd进入命令模式,输入:telnet localhost 5554  (5554为模拟器号)进入了模拟器的连接模式;输入redir add udp:7001:7001,一直重复输入redir add udp:7001:7001

zyp009的专栏 1190

SoC验证新思路:除了UVM仿真,你还可以试试Cadence JasperGold的形式化验证

本文深入探讨了Cadence JasperGold形式化验证在SoC设计中的创新应用,对比传统UVM仿真验证,详细解析了其数学穷尽性验证优势。通过实战案例展示了JasperGold在总线协议、时钟域交叉等关键场景的验证方法,并提供了混合验证流程设计与效能优化方案,帮助工程师提升验证效率30%以上。

weixin_30566063的博客 122

最全面的Socket使用解析

前言 Socket的使用在Android的网络编程中非常重要今天我将带大家全面了解Socket及其使用方法  目录 1.网络基础 1.1 计算机网络分层 计算机网络分为五层:物理层、数据链路层、网络层、运输层、应用层 其中: 网络层:负责根据IP找到目的地址的主机运输层:通过端口把数据传到目的主机的目的进程,来实现进程与进程之间

武略的专栏 4166

利用图层自动识别算法实现CAD到Revit BIM模型的高效转换 - VS2022与AutoCAD2024开发环境配置指南

本文详细介绍了如何配置VS2022与AutoCAD2024开发环境,并利用图层自动识别算法实现CAD图纸到Revit BIM模型的高效自动化转换。通过解析CAD图层的规律性,该算法能智能识别并分类墙、门、窗等构件,提取几何信息并驱动Revit自动创建三维模型,从而将传统繁琐的人工“翻模”工作转化为高效、准确的自动化流程,大幅提升BIM模型创建效率。

Apple的专栏 1128

从零搭建企业级AI网关:基于LiteLLM的安全防护体系设计

本文详细介绍了如何从零搭建企业级AI网关,基于LiteLLM构建全面的安全防护体系。内容涵盖分层防御架构、敏感数据处理、合规性配置与审计追踪,以及生产环境部署策略,助力企业安全高效地集成LLM技术,确保数据安全和合规性。

qq_27496129的博客 1292

【小沐学Android】Android实现socket网络通信

🍺SOCKET网络通信系列文章链接如下:🍺 🎈【小沐学python】(一)Python简介和安装🎈 🎈Python实现socket网络通信🎈 🎈C++实现socket网络通信(Windows)🎈 🎈Android实现socket网络通信🎈 🎈nodejs实现socket网络通信🎈 Android实现socket网络通信1、简介1.1 socket流程1.2 需要在子线程运行1.3 需要的权限2、环境配置2.1 Android Studio下载2.2 真机无线调试3、TCP方式3.1 服务端3.2 客户端3

爱看书的小沐 1万+

保姆级教程:用CST 2023一步步复现一个1-8GHz Vivaldi天线(含参数优化与结果分析)

本文提供了一份详细的CST 2023教程,指导读者如何从零开始设计并优化1-8GHz Vivaldi天线。内容涵盖工程设置、参数化建模、仿真加速技巧以及性能优化策略,特别适合需要实现宽带天线设计的工程师和研究人员。通过实战案例,帮助用户掌握Vivaldi天线的核心设计要点和CST高级功能应用。

weixin_30800987的博客 619

android socket通信如何抓取,安卓Socket通信实例(客户端、服务端)

安卓Socket通信实例本文摘自:https://whatsblog.icu/index.php/Android/17.html1、Socket通信必须知道的地方1、首先,Socket通信采用TCP模式,客户端需要连接到服务端2、采用网络,需要打开Internet权限3、需要合理调用线程,熟悉线程与输入输出流的使用4、socket服务端和客户端编码方式不一致将有可出现中文乱码问题5、在收发数据前,...

weixin_42505792的博客 997

点云中概念:匹配、配准、融合

匹配,是寻找与一幅图相似的图像(不对寻找到的图像做矫正)。 配准,是寻找相似图像但是变形后的图像(需要做一些旋转之类的校正变换)。 融合,是多幅图像连接成一幅大图,视频集成中用的比较多。 1)匹配: 2)配准: 比如由于固定式激光雷达受测量方式的限制和被测物体集合形状的限制,固定的话一次只能扫描被测物体有限范围的点云数据(比如一个面??),这需要在多个视角下进行多次扫描(就是将激光雷达前后左右四个面都扫一下??对的),然而每个视角下得到点云数据都具有独立的坐标系,无法直接进行拼接(拼接就是将四个面

m0_37957160的博客 1万+

29、几何形态测量学在蝴蝶翅膀研究中的应用

本博客介绍了几何形态测量学在花斑木蛱蝶(Pararge aegeria)翅膀研究中的应用,探讨了环境因素对蝴蝶翅膀大小和形状的影响。通过选择合适的地标并采用Procrustes分析方法,研究揭示了不同景观类型下翅膀形状的差异及其潜在的适应性意义。文章还讨论了发育可塑性在飞行形态变异中的作用,并比较了几何形态测量学与其他传统方法的优势。最后提出了未来研究方向,包括多因素综合分析、发育机制探索及长期生态监测,为理解蝴蝶的适应性进化提供了重要线索。

ff678的博客 108

android socket通信_安卓和PC端TCP通信

最近去了一趟上海,外滩的景色还是很nice的,非常喜欢这种具有历史感的建筑。很久没写文章,小姐姐最近打代码比较少,搞项管去。。。。。。程序媛才是小姐姐的最爱,记录文档写起来,哈哈哈。在一些工具类开发中,经常涉及不同设备之间的通信,今天我就针对安卓手机和PC端的通信,做一些文档说明。在安卓手机和PC端的TCP通信中,PC做为接收端(服务器Server端),以Android设备做为发送端(客户Clie...

weixin_39673742的博客 878

【制作100个unity游戏之22】3DRPG游戏开发07——其他详细的设计

我们会有有很多单例,如果每个单例都去写会很麻烦,所以我们定义泛型单例模式 Singleton,我们将所有的单例都继承这个泛型单例,就省略很多重复的工作定义一个GameManager类,继承Singleton,控制整个游戏的进度,比如如果主角死了,广播,游戏结束调用。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2577

Android -- Socket通信

1、通信简介 安卓与服务端的通信方式主要有两种,一种是 Http 通信,一种是 Socket 通信。 Socket 属于传输层,因为 TCP/IP 协议属于传输层,解决的是数据如何在网络中传输的问题 Http 协议属于应用层,解决的是如何包装数据 两者最大的差异,就是工作方式的不同: Http:采用 请求—响应 方式 1、即建立网络连接后,当 客户端 向 服务器 发送请求后,服务端才能向...

一只驴在敲代码 1132

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

安卓app和java通信实例_Android开发之Socket通信传输简单示例

本文实例讲述了Android Socket通信传输实现方法。分享给大家供大家参考,具体如下:1.开篇简介Socket本质上就是Java封装了传输层上的TCP协议(注:UDP用的是DatagramSocket类)。要实现Socket的传输,需要构建客户端和服务器端。另外,传输的数据可以是字符串和字节。字符串传输主要用于简单的应用,比较复杂的应用(比如Java和C++进行通信),往往需要构建自己的应用...

weixin_36471865的博客 697

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Android中Socket通信的简单实现

前言Android Framework 层代码中大量使用了 Binder IPC 通信方式,除此之外,Socket 也是一种重要的 IPC 通信方式,比如StorageManagerService(8.0 之前叫 MountService)与 Vold 之前的通信,SystemServer 和 Zygote 之间也是通过 Socket 进行通信的。本文简单总结下 Android Java 层在使用...

ding3106的专栏 6万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

用java进行安卓开发的步骤_Android开发中Socket通信的基本实现方法讲解

一、Socket通信简介Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信。两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据。而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求。 那么,什么是s...

weixin_42305634的博客 616

基于Socket通信的Android聊天室

本例采用PC端做服务器端,android端做客户端,进行Socket通信;能进行群聊,并能上传android端的本地文件(图片)到PC端,PC端又将收到的文件转发给所有用户。

毕业作品网站 693

安卓使用完整底层linux,Android使用socket使底层和framework通信

一般的native和framework的通信是通过jni,但是这一般只是framework调用native,native如果有消息要怎样通知上层呢?Android中GSP模块提供一种解决思路,但是实现有些复杂,这里介绍一种使用socket通信的方法可以使native和framework自由通信,具体实现如下:android中使用jni对linux中的socket进行了封装。使用起来十分的方便。由于...

weixin_34901693的博客 317

基于 Socket 的 Android与树莓派通信

个人博客地址:http://icharles.top/2018/04/29/Socket/ 一、Socket定义 即套接字,是一个对 TCP / IP协议进行封装 的编程调用接口(API) 1.即通过Socket,我们才能在Andorid平台上通过 TCP/IP协议进行开发 2.Socket不是一种协议,而是一个编程调用接口(API),属于传输层(主要解决数据如何在网络中传输) 成对出现...

Charles' blog 7437

Android Socket通信介绍和实例

Android Socket通信介绍和实例Socket作用 : Socket用于描述ip地址和端口,以及实现通信Socket操作:连接远程机器发送数据接收数据关闭连接绑定端口监听数据到达在绑定的端口上接收来自远程机器的连接注意:服务端和客户端都需要实现Socket,但是实现方式不一样客户端:实现连接远程机器,发送数据,接收数据,关闭连接服务端:绑定端口,监听数据到达,在绑定的端口上接收来自远程机器...

xkfer 2951
上一篇: android socket通信(上)
下一篇: Ubuntu下搭建JavaEE开发环境
htttw
博客等级 码龄18年 378粉丝 73原创
评论 16
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值