Android-Socket通信<客户端循环发送数据给服务端>
Android端建立服务端和客户端,使用客户端循环发送数据给服务端,服务端并作出回应。
服务端
import android.util.Log;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;import java.net.ServerSocket;
import java.net.Socket;
public class Server {
private ServerSocket serverSocket;
private Socket client;
private PrintWriter printWriter;
public static Server getInstance() {
return ServerHolder.instance;
}
static class ServerHolder {
static Server instance = new Server();
}
private Server() {
try {
//监听
serverSocket = new ServerSocket(9001);
} catch (IOException e) {
e.printStackTrace();
}
}
public void accept() {
new Thread(new Runnable() {
@Override
public void run() {
try {
client = serverSocket.accept();
while (true) {
// 读取数据
InputStream inputStream = client.getInputStream();
//接收
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String strRecive = reader.readLine();
if (strRecive.length() != 0) {
Log.d("tmcservicetest_aar", strRecive);
//发送
printWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream(), "UTF-8")), true);
printWriter.println("Hello Client");
} else {
printWriter.println("i am sorry!");
}
}
} catch (Exception e) {
Log.e("tmcservicetest_aar", "Create Server failed");
e.printStackTrace();
}
}
}).start();
}
}
客户端
import android.util.Log;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
public class Client {
Socket socket;
String receiveMsg = "";
private Client() {
}
public static Client getInstance() {
return ClientHolder.instance;
}
static class ClientHolder {
static Client instance = new Client();
}
public void connect() {
new Thread(new Runnable() {
@Override
public void run() {
try {
//创建客户端Socket,指定服务器的IP地址和端口
if (socket == null) {
socket = new Socket(InetAddress.getLocalHost(), 9001);
}
while (true) {
PrintWriter printWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream(), "UTF-8")), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
//发送
printWriter.println("Hello Server");
//接收
if ((receiveMsg = in.readLine()) != null) {
Log.d("tmcservicetest_aar", receiveMsg);
}
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
public void close() {
try {
if (socket != null) {
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Activity中调用
// 调用开启服务端
Server.getInstance().accept();
// 调用客户端建立连接
Client.getInstance().connect();