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

发布时间:2026/5/27 23:47:15

手机和电脑怎么传文件?从 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. 拿到 clientSocket4. 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

相关新闻