② 打开连接到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;