public class SocketUtils {
private Socket socket;
private static final SocketUtils ourInstance = new SocketUtils();
static SocketUtils getInstance() {
return ourInstance;
private SocketUtils() {
* 向指定ip地址发送指令
* @param ipAddress
* @param port
* @param msg
* @param listener
public void sendMsg(String ipAddress, int port, String msg, OnSocketResult listener) {
MyAsyncTask asyncTask = new MyAsyncTask(listener);
asyncTask.execute(ipAddress, String.valueOf(port), msg);
* 自定义asyncTask
public class MyAsyncTask extends AsyncTask
{
private final OnSocketResult listener;
public MyAsyncTask(OnSocketResult listener) {
super();
this.listener = listener;
@Override
protected String doInBackground(String... strings) {
String address = strings[0];
int port = Integer.parseInt(strings[1]);
String msg = strings[2];
String data = "";
try {
// Log.i("tcp", "启动客户端");
if (socket == null) {
socket = new Socket(address, port);
// Log.i("tcp", "客户端连接成功");
if (socket != null && socket.isConnected() && msg != null) {
socket.getOutputStream().write(msg.getBytes());
socket.getOutputStream().flush();
PrintWriter pw = new PrintWriter(socket.getOutputStream());
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1) {
data = new String(buffer, 0, len);
Log.i("tcp", "收到服务器的数据:" + data);
TCPClient.closeSocket(socket);
// Log.i("tcp", "客户端断开连接");
pw.close();
} catch (Exception EE) {
EE.printStackTrace();
// Log.i("tcp", "客户端无法连接服务器");
} finally {
try {
if (socket != null) {
socket.close();
} catch (IOException e) {
e.printStackTrace();
socket = null;
return data;
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
listener.onSuccess(result);
* 获取socket结果的接口
public interface OnSocketResult {
void onSuccess(String result);
/** * 作者:guoyzh * 时间:2019/5/15 11:02 * 功能:处理socket的工具类 */public class SocketUtils { private Socket socket; private static final SocketUtils ourInstance = new SocketUtils(); static So...
android
:name="
android
.permission.INTERNET" />
Android
主线程
中
不允许做耗时操作,
Socket
需要放在子线程
中
;
1、创建
Socket
连接
,拿到输入输出流:
使用
的框架是
Android
Async
项目地址:https://github.com/koush/
Android
Async/tree/master/
Android
Async/src/com/koushikdutta/async
参考的文章是 http://programminglife.io/
android
-http-server-with-
android
async/
https://git
import
android
.content.Context;
import
android
.net.ConnectivityManager;
import
android
.net.NetworkInfo;
import
android
.net.wifi.WifiInfo;
import
android
.net.wifi.Wifi...
先上效果图布局文件<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:
android
="http://schemas.
android
.com/apk/res/
android
"
xmlns:tools="http://schemas.
android
.com/tools"
android
:layout_widt
App开发常用的一些网络通信技术,主要包括如何
使用
多线程完成异步操作、如何进行HTTP接口调用与图片获取、如何实现文件上传和下载操作、如何运用
Socket
通信技术。
一、 多 线 程
介绍多线程技术在App开发
中
的具体运用,首先说明如何利用Message配合Handler完成主线程与分线程之间的简单通信;然后阐述进度对话框的用法,以及如何自定义实现文本进度条与文本进度圈;接着讲述异步任务...
当
Android
的
Socket
连接
失败时,可能有多种原因导致。以下是一些常见的解决方法:
1. 检查网络
连接
:首先,确保你的设备已
连接
到可用的网络。你可以
使用
ConnectivityManager来检查网络
连接
状态,如下所示:
```java
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
// 网络可用
} else {
// 网络不可用
2. 确保服务器地址和
端
口正确:确保你正在尝试
连接
的服务器地址和
端
口是正确的。
3. 检查防火墙设置:如果你的设备或服务器上启用了防火墙,确保防火墙允许与指定
端
口的
连接
。
4. 检查权限:在
Android
Manifest.xml文件
中
,确保你已经声明了必要的权限。例如,如果你
使用
了Internet权限,需要在文件
中
添加以下行:
```xml
<uses-permission
android
:name="
android
.permission.INTERNET" />
5.
使用
异步任务:如果你在主线程
中
执行
socket
连接
操作,可能会导致主线程阻塞。建议将
socket
连接
操作放在异步任务
中
执行。可以
使用
AsyncTask
或者线程池来实现异步操作。
```java
private class ConnectTask extends
AsyncTask
<Void, Void,
Socket
> {
@Override
protected
Socket
doInBackground(Void... params) {
Socket
socket
= null;
try {
socket
= new
Socket
();
socket
.connect(new Inet
Socket
Address("服务器IP", 服务器
端
口), 5000); // 设置超时时间为5秒
} catch (IOException e) {
e.printStackTrace();
return
socket
;
@Override
protected void onPostExecute(
Socket
socket
) {
if (
socket
!= null) {
//
连接
成功
} else {
//
连接
失败
这些是一些常见的解决方法,希望对你有所帮助!如果问题仍然存在,请提供更多的细节和错误信息,以便我能够更好地帮助你。
syntax error, expect RPAREN, actual LITERAL_INT pos 885, line 46, column 29, token LITERAL_INT
36121