Android客户端与服务器端通过SOCKET连接进行读写(将JSON数据转化为字符串后传输)

这个示例展示了如何在Android客户端使用Socket与服务器建立连接,并进行JSON数据的读写操作。代码创建了一个SocketInteractServer类,包含了连接、读取、写入和关闭连接的方法。通过DataInputStream和DataOutputStream实现数据流的传输,同时确保数据以UTF-8编码。如果连接断开,代码会尝试重新连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class SocketInteractServer {
	private static final String TAG = "SocketInteractServer";

	private int PORT = 7070;
	private String IP = "109.105.3.230";
	private Socket socket = null;
	private DataInputStream in = null;
	private DataOutputStream out = null;

	public boolean isConnected() {//连接是否保持
		return socket.isConnected();
	}

	public  SocketInteractServer() {//初始化服务器IP和监听端口号
		IP=Controller.getServerIP();
		PORT=Controller.getServerPort();
		connect();
	}

public void connect() {  //建立于服务器端的SOCKET连接并获得输入输出流
		try {
			socket = new Socket(IP, PORT);
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			in = new DataInputStream(socket.getInputStream());//获得SOCKET输入流
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			out = new DataOutputStream(socket.getOutputStream());获得SOCKET输出流
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

/**
 * 从SOCKET中读取数据
 * @return
 */
	public String readStr() {
		if (false == isReadable())
			connect();// 重新连接
		String messageString = null;
		byte[] reply = new byte[1024];
		int len = -1;
		try {
			len = in.read(reply);//读入的字节数
		} catch (IOException e) {
			e.printStackTrace();
		}
		if (len <= 0)
			return null;
		try {
			messageString = new String(reply, "utf-8").trim();
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return messageString;
	}


	/**
	 * 向SOCKET中写入数据
	 * @return
	 */
	public boolean writeStr(String message) {
		if(socket.isConnected()==false)
			return false;
		byte[] request=null;
		try {
			request = message.getBytes("utf-8");
		} catch (UnsupportedEncodingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		try {
			out.write(request);
			out.flush();
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}

	public boolean isReadable() {
		return isConnected() && in != null;
	}

	public boolean isWriteable() {
		return isConnected() && out != null;
	}

	public void close() {
		if (in != null)
			try {
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		if (out != null)
			try {
				out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		if (socket != null)
			try {
				socket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值