当前位置: 首页 > news >正文

手机和电脑怎么传文件?从 TCP 到 UDP,手写一个 Android Socket 聊天 App(附完整代码)

手机和电脑怎么传文件?从 TCP 到 UDP,手写一个 Android Socket 聊天 App(附完整代码)

目录

  • 一、Android 上为什么要用 Socket?
  • 二、TCP Socket 基础
    • 2.1 Client 端
    • 2.2 Server 端
  • 三、Android 开发 Socket 的特殊点
  • 四、实战:局域网聊天 App
  • 五、UDP Socket 通信
  • 六、文件传输实战
  • 七、WiFi P2P(WiFi Direct)Socket
  • 八、常见踩坑记录
  • 九、总结与选型

一、Android 上为什么要用 Socket?

HTTP 接口是 Android 和服务器通信的主流方案——发个请求,拿个 JSON,够用了。

但有些场景 HTTP 就不行了:

  • 实时聊天:消息一来就得立刻推过去,HTTP 轮询太费电
  • 文件传输:传大文件,HTTP 有头有尾的开销太大
  • 局域网设备通信:手机和电脑在同一个 WiFi 下,直接用 Socket 比走服务器快得多
  • IoT 控制:智能家居设备很多走 TCP Socket,手机 App 必须能连

Android 用的是标准 Java Socket API(java.net.Socket/java.net.ServerSocket),外加一条铁律——不能在主线程做网络操作

// ❌ 主线程直接连 —— 必崩newThread(()->{Socketsocket=newSocket("192.168.1.100",8888);// NetworkOnMainThreadException}).start();// ✓ 开子线程Socketsocket=newSocket("192.168.1.100",8888);// 没问题

二、TCP Socket 基础

TCP 是有连接的、可靠的。一次 Socket 通信分为 Client(发起方)和 Server(监听方)。

Android Socket 通信流程:

Client 端

Server 端

TCP 三次握手

双向收发

1. new ServerSocket(port)

2. serverSocket.accept()
阻塞等待连接

3. 拿到 clientSocket

4. InputStream 收数据
OutputStream 发数据

5. socket.close()

1. new Socket(ip, port)

2. 连接成功

3. OutputStream 发数据
InputStream 收数据

4. socket.close()

Server 端的accept()是阻塞的——没客户端连过来,代码就卡在那等。所以 Server 必须放子线程里跑。

2.1 Client 端

publicclassTcpClient{privateSocketsocket;privatePrintWriterwriter;privateBufferedReaderreader;publicvoidconnect(Stringip,intport){newThread(()->{try{// 1. 创建 Socket,发起连接socket=newSocket(ip,port);// 2. 获取输入输出流writer=newPrintWriter(newOutputStreamWriter(socket.getOutputStream()),true);reader=newBufferedReader(newInputStreamReader(socket.getInputStream()));// 3. 发送数据writer.println("Hello, Server!");// 4. 接收数据(阻塞)Stringresponse=reader.readLine();Log.d("TcpClient","收到: "+response);}catch(IOExceptione){Log.e("TcpClient","连接失败",e);}}).start();}publicvoidsend(Stringmsg){if(writer!=null){newThread(()->writer.println(msg)).start();}}publicvoidclose(){try{if(socket!=null)socket.close();}catch(IOExceptione){e.printStackTrace();}}}

2.2 Server 端

publicclass<
http://www.jsqmd.com/news/899705/

相关文章:

  • GitHub Copilot CLI 接入 Azure AI Foundry 私有云端模型实战指南
  • 从化区搬家公司电话 理赔流程拆解:普通人一看就懂 - 从来都是英雄出少年
  • 从传播路径看日出龙舌兰的记忆点
  • 2026 上海五大 GEO 优化服务商实力排行与测评 - GEO优化
  • CAXA 尺寸标注编辑 —— 公差配合
  • 从抓包到脚本:一个真实物联网设备TCP通信的JMeter测试案例复盘
  • 【ChatGPT投资避坑指南】:92%散户踩中的5大认知误区、3个被严重高估的“伪AI标的”及替代性配置方案
  • 广州从化区搬家公司推荐 办公室搬迁流程混乱实用维权指南 - 从来都是英雄出少年
  • 2026 全球主流 GEO 优化服务商综合实力盘点 - GEO优化
  • Mac小白必看:用Easy App Locker给微信、相册加把锁,再也不怕别人借电脑了
  • SMCBF:融合滑模控制与屏障函数,打造鲁棒自动驾驶安全控制
  • 别再手动导数据了!用Kettle Spoon 9.0零代码搞定MySQL到PostgreSQL的定时同步
  • STM32MP157实战:手把手教你搞定USB OTG驱动,让开发板变身U盘和声卡
  • 豆瓣影评人内部培训材料首次外泄:ChatGPT辅助写作的5级可信度分级标准与3种人工签名增强技术
  • CLAD:基于OpenCL的并行自动微分库,加速大规模光束法平差
  • 2026 年成都 GEO 优化服务商实力榜单:五大品牌区域服务能力权威评估 - GEO优化
  • 好用的AI论文网站推荐(2026最新版)
  • 从游戏角色移动到UI布局:定比分点公式在Unity/Cocos开发中的实战应用
  • STM32+ESP8266 MQTT实战:从传感器到OneNet物联网平台的数据上云之旅
  • 深度解析:基于Cocos2d-x的植物大战僵尸重制版架构设计与实现
  • 从化区搬家拆装损坏推卸责任?维权全攻略 正规公司推荐 - 从来都是英雄出少年
  • 五子棋AI对战平台搭建指南:整合强化学习模型与PyGame可视化界面
  • 别再买错蓝牙模块了!JDY-31从机模块实测,手把手教你用CH340搞定手机通信
  • 从搜索入口看《我想我爱到失眠了》的传播价值
  • 别再死记API了!用“包子铺”和“停车场”的故事彻底搞懂FreeRTOS四种信号量
  • 单相全桥逆变三种SPWM调制方式(单极/双极/倍频)到底怎么选?一篇讲透优缺点与选型
  • 广州从化区搬家公司哪家便宜?产业园工厂搬迁避坑指南 - 从来都是英雄出少年
  • Windows激活神器:3分钟免费激活完整指南
  • 基于傅立叶变换的时序信号去噪实战:从理论到Python实现
  • Git配置错了别慌!一文搞懂全局(global)与项目(local)用户信息的区别与正确设置