Android原生开发同一局域网内利用socket通信进行数据传输

1、数据接收端代码如下,注意:socket 接收信息需要异步运行:

复制代码
// port 端口号自定义一个值,比如 8888,但需和发送端使用的端口号保持一致
ServerSocket serverSocket = new ServerSocket(port);
while (true) {
	try {
        //连接客户端
		Socket clientSocket = serverSocket.accept();
		BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        // 接收内容
		String message = in.readLine();
		clientSocket.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
}

2、数据发送端代码,注意:socket 发送信息需要异步运行:

复制代码
try {
    // ip 指的是数据接收端的 ip 地址,port 端口号和前面数据发送端的端口号保持一致
	Socket socket = new Socket(ip, port);
	DataOutputStream writer = new DataOutputStream(socket.getOutputStream());
    // 写入 UTF8 格式的文本数据并发送,这里我把内容写死,实际操作中可以动态替换
	writer.writeUTF("文本数据123456");
	socket.close();
} catch (IOException e) {
	e.printStackTrace();
}

3、获取本机 ip 地址

3.1、方式一:如果是连的局域网 Wifi,可以代码获取

复制代码
// 获取当前WiFi的IP地址
public static String getLocalIpAddress(Context context) {
	WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
	int ipAddress = wifiManager.getConnectionInfo().getIpAddress();
	String str = String.format("%d.%d.%d.%d",
			(ipAddress & 0xff),
			(ipAddress >> 8 & 0xff),
			(ipAddress >> 16 & 0xff),
			(ipAddress >> 24 & 0xff));
	if (TextUtils.isEmpty(str)) {
		Toast.makeText(context, "WIFI IP 地址获取失败", Toast.LENGTH_SHORT);
	}
	return str;
}

3.2、如果不是连的局域网 Wifi 或者不想用代码获取,可以打开设备-设置-关于手机/平板-状态信息-IP 地址,如下图所示:

4、个人自测调试用的 Demo 源码,有需要的可以打开下面资源链接免积分下载:

https://download.csdn.net/download/victor_E_N_01185/90244292?spm=1001.2014.3001.5503

5、Demo 操作及效果视频如下:要确保所连的 Wifi 是同一个,一般同一 Wifi 的 ip 地址的前两个部分是一样的,比如都是 192.168.XX.XX,最好关闭移动流量的开关,否则数据传输可能会失败,我用的是代码来获取的本机 ip 地址,如果使用的是流量,则 ip 地址会获取失败,后续操作也都会失败,大家可以改为手动输入 ip 地址或者写死 ip 地址来进行调试

局域网 Socket 数据传输 Demo

相关推荐
九英里路2 小时前
protobuf快速上手
网络·c++·中间件·json·谷歌·序列化·protobuf
测试界的小码农4 小时前
【Linux 命令实战(06):Linux 文件权限管理,掌握 chmod、chown、chgrp】
linux·运维·服务器
艺杯羹5 小时前
1Panel 装好后 ufw 仍是 inactive:一次服务器安全盲区复盘
服务器·数据库·安全·网络安全·系统架构·实战·1panel
一条破秋裤6 小时前
【1114】【并发控制】【笔记】
linux
2035去旅行8 小时前
ADB的底层原理
linux·adb·嵌入式·arm·soc
武子康8 小时前
单卡 A6000 跑 Qwen-Drive:怎样留下可比较的第一条基线?
linux·人工智能·深度学习
女神下凡8 小时前
芯参谋(107):杰理AC_中科蓝讯_开发指南
linux·服务器·网络·单片机·嵌入式硬件
落羽的落羽8 小时前
【C++】C++17的主要特性
linux·服务器·开发语言·c++·算法·机器学习
爱和冰阔落12 小时前
【Linux网络】TCP 半包粘包怎么解决?从长度报头、JSON 拆包到网络计算器完整实战
linux·运维·网络·tcp/ip
say_fall14 小时前
【Linux网络编程】UDP套接字编程:系统编程组件、基础回显服务、InetAddr与地址转换、翻译服务与线程池聊天室
linux·服务器·网络·udp·vr