Android 客户端Socket 与 Java服务端ServerSocket

② 打开连接到Socket的输入/输出流

InputStream in = server.getInputStream();

OutputStream out = server.getOutputStream();

③ 按照协议对Socket进行读/写操作

④ 关闭输入输出流、关闭Socket

in.close();

out.close();

三、服务端

public class ServerSocketDemo {

public static void main(String[] args) throws IOException {

ServerSocket serverSocket = new ServerSocket(9988);

Socket socket = serverSocket.accept();

InputStream is = socket.getInputStream();

InputStreamReader isr = new InputStreamReader(is);

BufferedReader br = new BufferedReader(isr);

String info = null;

while ((info = br.readLine()) != null) {

System.out.println(“我是服务器,客户端说:” + info);

}

socket.shutdownInput();// 关闭输入流

// 4、获取输出流,响应客户端的请求

OutputStream os = socket.getOutputStream();

PrintWriter pw = new PrintWriter(os);

pw.write(“欢迎您!”);

pw.flush();

// 5、关闭资源

pw.close();

os.close();

br.close();

isr.close();

is.close();

socket.close();

serverSocket.close();

}

}

四、客户端

1、创建一个单例Socket管理类·

public class SocketManager {

private static final String TAG = “SocketManager”;

public static Socket clientSocket = null;

private int PORT;     //端口号

private String IP;

/**

* 端口

*/

public static SocketManager instance = new SocketManager();

private SocketManager() {

clientSocket = connect();

}

public static SocketManager getInstance() {

return instance;

}

public static Socket getClientSocket() {

return clientSocket;

}

public static void setClientSocket(Socket socket){

clientSocket = socket;

}

/**

* 获取当前socket实例

*/

public Socket connect() {

new Thread(new Runnable() {

@Override

public void run() {

try {

clientSocket = new Socket(IP,PORT);

setClientSocket(clientSocket);

readSocketData(clientSocket);

//sendHeartBeat(clientSocket);

LogUtils.e(“TAG”,“连接成功…”);

} catch (IOException e) {

e.printStackTrace();

}

}

}).start();

return clientSocket;

}

/**

* 发送心跳包

* ThreadPoolManager.getSingleInstance().execute()   线程管理类

* */

public void sendHeartBeat(Socket socket){

ThreadPoolManager.getSingleInstance().execute(new SendData(socket));

}

/**

* 接收服务端数据

* */

public void readSocketData(Socket socket){

ThreadPoolManager.getSingleInstance().execute(new ReceiveData(socket));

}

/**

* 断开连接

*/

public void disConnect() throws IOException {

if (clientSocket != null) {

clientSocket.close();

clientSocket = null;

}

}

/**

* 释放单例, 及其所引用的资源

*/

public void release() throws IOException {

if (instance != null) {

if (clientSocket != null) {

clientSocket.close();

clientSocket = null;

}

instance = null;

}

}

}

2、创建一个SendData线程类来负责发送数据

public class SendData implements Runnable {

private Socket sendsocket;

private PrintWriter printWriter = null;

public SendData(Socket socket) {

this.sendsocket = socket;

}

public void run() {

Socket socket = SocketManager.getClientSocket();

try {

LogUtils.e(“TAG”, “发送的数据包:” + JsonUtil.getData());

sendHeartBeatPackage(socket, “要发送的数据”);//数据包

} catch (JSONException e) {

e.printStackTrace();

}

}

/**

* 发送数据包到服务端

*/

public int sendHeartBeatPackage(Socket socket1, String msg) {

int returnCode = 0;

if (socket1.isClosed() || socket1 == null) {

returnCode = 0;

}

try {

printWriter = new PrintWriter(socket1.getOutputStream());

printWriter.println(msg);

printWriter.flush();

socket1.getOutputStream().flush();

returnCode = 1;

} catch (Exception e) {

returnCode = 0;

}

return returnCode;

}

}

3、创建一个ReceiveData接收线程类

public class ReceiveData implements Runnable {

private Socket socket = null;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值