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

Android tcp socket sample示例

Android tcp socket sample示例

抄了菜鸟的java socket示例,在android模拟器上测试无误:
https://www.runoob.com/java/java-socket-class.html

不要忘记在client 和 server的AndroidManifest里添加网络权限

Server sample

package com.example.socketservertest;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;public class MainActivity extends Activity {private HandlerThread handlerThread;private Handler mHandler;private static final String LOG_TAG = "SocketServerTest";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.btn_create_server).setOnClickListener(onClickListener);handlerThread = new HandlerThread("SocketClientTest_thread");handlerThread.start();mHandler = new MyHandler(handlerThread.getLooper());}private View.OnClickListener onClickListener = new View.OnClickListener() {@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_create_server:mHandler.sendEmptyMessage(MSG_CREATE_SERVER);break;default:break;}}};private static final int MSG_CREATE_SERVER = 0;private class MyHandler extends Handler {MyHandler(Looper looper) {super(looper);}@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case MSG_CREATE_SERVER:createSocketServer();break;default:break;}}}private static final int PORT = 4003;private void createSocketServer() {ServerSocket serverSocket = null;Socket clientSocket = null;try {Log.d(LOG_TAG, "Server starting...");// 1. 创建 ServerSocket,监听指定端口serverSocket = new ServerSocket(PORT);Log.d(LOG_TAG, "Server started. Waiting for client...");// 2. 等待客户端连接clientSocket = serverSocket.accept();Log.d(LOG_TAG, "Client connected.");// 3. 获取输入流,读取客户端消息BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));while (true) {String message = in.readLine();Log.d(LOG_TAG, "Client says: " + message);if (message == null) {// client disconnected.break;}}// 4. 获取输出流,向客户端发送响应/*PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);out.println("Hello Client!");*/// 5. 关闭连接} catch (IOException ex) {Log.w(LOG_TAG, "createSocketServer error", ex);if (null != clientSocket) {try {clientSocket.close();} catch (IOException e) {}}if (null != serverSocket) {try {serverSocket.close();} catch (IOException e) {}}}}
}

layout xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><Buttonandroid:id="@+id/btn_create_server"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:layout_marginTop="100dp"android:text="btn_create_server"android:textSize="25sp"/></LinearLayout>

Client sample

package com.example.socketclienttest;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.view.View;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.Socket;public class MainActivity extends Activity {private HandlerThread handlerThread;private Handler mHandler;private static final String LOG_TAG = "SocketClientTest";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.btn_connect).setOnClickListener(onClickListener);findViewById(R.id.btn_disconnect).setOnClickListener(onClickListener);findViewById(R.id.btn_send_msg).setOnClickListener(onClickListener);handlerThread = new HandlerThread("SocketClientTest_thread");handlerThread.start();mHandler = new MyHandler(handlerThread.getLooper());}int count = 0;private View.OnClickListener onClickListener = new View.OnClickListener() {@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_connect:mHandler.sendEmptyMessage(MSG_CONNECT);break;case R.id.btn_disconnect:mHandler.sendEmptyMessage(MSG_DISCONNECT);break;case R.id.btn_send_msg:Message message = mHandler.obtainMessage(MSG_SEND_MSG);message.obj = "msg_" + count;mHandler.sendMessage(message);count++;break;default:break;}}};private static final int MSG_CONNECT = 0;private static final int MSG_SEND_MSG = 1;private static final int MSG_DISCONNECT = 2;private class MyHandler extends Handler {MyHandler(Looper looper) {super(looper);}@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case MSG_CONNECT:connectToSocketServer();break;case MSG_DISCONNECT:disconnectFromSocketServer();break;case MSG_SEND_MSG:String data = (String) msg.obj;sendDataToServer(data);break;default:break;}}}private static final String IP = "localhost";private static final int PORT = 4003;PrintWriter out;BufferedReader in;Socket socket;private void connectToSocketServer() {try {// 1. 创建 Socket 连接socket = new Socket();// 设置读取超时为 3 秒socket.setSoTimeout(3000);socket.setKeepAlive(true);Log.d(LOG_TAG, "start connect, IP:" + IP + ", PORT:" + PORT);// 设置连接超时为 5 秒socket.connect(new InetSocketAddress(IP, PORT), 5000);Log.d(LOG_TAG, "connect success.");// 2. 获取输出流,向服务器发送数据out = new PrintWriter(socket.getOutputStream(), true);//out.println("Hello Server!");// 3. 获取输入流,接收服务器响应in = new BufferedReader(new InputStreamReader(socket.getInputStream()));/* String response = in.readLine();System.out.println("Server response: " + response);*/} catch (IOException ex) {Log.w(LOG_TAG, "connectToSocketServer error", ex);socket = null;}}private void disconnectFromSocketServer() {try {socket.close();} catch (IOException ex) {Log.w(LOG_TAG, "disconnectFromSocketServer error", ex);socket = null;}}private void sendDataToServer(String msg) {Log.d(LOG_TAG, "client sending msg:" + msg);out.println(msg);}}

layout xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><Buttonandroid:id="@+id/btn_connect"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:layout_marginTop="100dp"android:text="btn_connect"android:textSize="25sp"/><Buttonandroid:id="@+id/btn_send_msg"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:layout_marginTop="10dp"android:text="btn_send_msg"android:textSize="25sp"/><Buttonandroid:id="@+id/btn_disconnect"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:layout_marginTop="10dp"android:text="btn_disconnect"android:textSize="25sp"/></LinearLayout>

----------------------------- end line --------------------------------------------

http://www.lryc.cn/news/598556.html

相关文章:

  • 亚纳米级检测!潜望式棱镜的“检测密码”,决定手机远景清晰度
  • Text2SQL智能问答系统开发(一)
  • 激光雷达的单播和广播模式介绍
  • Java技术栈/面试题合集(17)-Git篇
  • C++符合快速入门(有java和js基础的)
  • 7.24路由协议总结
  • 如何将拥有的域名自定义链接到我的世界服务器(Minecraft服务器)
  • C++ 基础入门
  • 【shell脚本编程】day1 备份指定文件类型
  • 深入理解大语言模型生成参数:temperature、top\_k、top\_p 等全解析
  • 社区资源媒体管理系统设计与实现
  • 复盘—MySQL触发器实现监听数据表值的变化,对其他数据表做更新
  • Kubernetes Kubelet 资源配置优化指南:从命令行参数到配置文件的最佳实践
  • Hadoop磁盘I/O瓶颈的监控与优化:从iostat指标到JBOD vs RAID的深度解析
  • 40、鸿蒙Harmony Next开发:UI场景化-组件截图(ComponentSnapshot)
  • 跨境支付入门~国际支付结算(结算篇)
  • 龙虎榜——20250724
  • Vue工程化 ElementPlus
  • 数据结构实验-查找与排序算法
  • NPM/Yarn完全指南:前端开发的“基石“与“加速器“
  • 基于单片机智能交通灯设计
  • 人工智能与云计算双轮驱动:元宇宙如何重构全球产业生态
  • Python之底层级的网络接口——Socket(套接字)协议族及函数介绍
  • 【王树森推荐系统】推荐系统涨指标的方法05:特殊用户人群
  • Linux(centos7)安装 docker + ollama+ deepseek-r1:7b + Open WebUI(内含一键安装脚本)
  • 250714脑电分析课题进展——基础知识扩展与论文阅读
  • Android跨进程通信完全教程:从基础到实战
  • 前端笔记:同源策略、跨域问题
  • OpenCV —— 绘制图形
  • git更新内核补丁完整指南