news 2026/5/27 23:47:12

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手机和电脑怎么传文件?从 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<
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/27 23:43:19

5个理由告诉你:为什么Postman便携版是API测试的最佳选择

5个理由告诉你&#xff1a;为什么Postman便携版是API测试的最佳选择 【免费下载链接】postman-portable &#x1f680; Postman portable for Windows 项目地址: https://gitcode.com/gh_mirrors/po/postman-portable 在当今快速发展的软件开发领域&#xff0c;API测试已…

作者头像 李华
网站建设 2026/5/27 23:39:14

RevokeMsgPatcher完整指南:Windows平台终极防撤回与多开解决方案

RevokeMsgPatcher完整指南&#xff1a;Windows平台终极防撤回与多开解决方案 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://…

作者头像 李华
网站建设 2026/5/27 23:33:31

文科生都在用GitHub Copilot写代码了,你还在手动敲?

1. GitHub Copilot&#xff1a;文科生的代码神器 第一次听说GitHub Copilot时&#xff0c;我正在帮一位学中文的朋友修改个人网站。她盯着我敲代码的样子就像在看天书&#xff0c;但当我打开Copilot&#xff0c;输入"创建一个响应式导航栏"后&#xff0c;神奇的事情发…

作者头像 李华
网站建设 2026/5/27 23:33:30

SDN与多路径技术重塑互联网骨干网:从BGP局限到智能流量调度

1. 项目概述&#xff1a;当SDN遇见多路径&#xff0c;重塑互联网骨干网互联网的骨干网&#xff0c;就像连接各大洲的海底光缆和高速公路网&#xff0c;其核心任务是在成千上万个自治系统&#xff08;AS&#xff0c;可以理解为一个个独立的网络王国&#xff0c;如电信运营商、大…

作者头像 李华