服务端多线程阻塞:
/*****
*
* @author skiky
* @describle
*
*/
public class ClientSt {
private final static Integer port = 10001;
private PrintWriter out = null;
private Socket socket = null;
public void sendMessageToService(String message) {
try {
InetAddress addr = InetAddress.getByName(null); //为null 代表本机ip
socket = new Socket(addr, port);
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream())), true);
for (;;) {
Thread.sleep(1000);
out.println(message);
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
try {
if (null != out) {
out.close();
}
if (null != socket) {
socket.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
public static void main(String[] args) {
new ClientSt().sendMessageToService("卡卡西,你好");
}
}
服务端代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/****
*
* @author skiky
* @describle socket thread server
*
*/
public class ServerSt {
public void loadServer() {
ExecutorService executor = Executors.newSingleThreadExecutor();
Callable<Object> task = new Callable<Object>() {
public Object call() throws Exception {
LoadService loadService = new LoadService();
loadService.run();
return "";
}
};
Future<Object> future = executor.submit(task);
try {
// 无限等待除非发生Exception
future.get();
// 最大等待 一分钟否则会抛出超时异常
// future.get(60, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ServerSt().loadServer();
}
}
class LoadService implements Runnable {
public LoadService() {
super();
}
@Override
public void run() {
Integer port = 10001;
ServerSocket server = null;
Socket socket = null;
BufferedReader in = null;
try {
server = new ServerSocket(port);
socket = server.accept();
in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
for (;;) {
String message = in.readLine();
System.out.println("客户端信息:" + message);
// socket.setSoTimeout(10*1000);
}
} catch (IOException e) {
System.out.println(e);
} finally {
try {
if (null != in) {
in.close();
}
if (null != server) {
server.close();
}
if (null != socket) {
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}