只允许单个客户端连接。start启动,stop停止。
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.net.ServerSocket;
- import java.net.Socket;
- public class TcpServer {
- private int port;
- private ServerSocket serverSocket = null;
- private Socket connected;
- private PrintWriter outToClient;
- private boolean bRunning = true;
- public TcpServer(String strPort) {
- this.port = Integer.parseInt(strPort);
- }
- public void start() {
- System.out.println("TCPServer waiting for client on port: " + port);
- try {
- serverSocket = new ServerSocket(port);
- } catch (IOException e) {
- e.printStackTrace();
- }
- ServerThread thread = new ServerThread();
- thread.start();
- }
- public void stop() {
- bRunning = false;
- try {
- connected.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- class ServerThread extends Thread {
- public void run() {
- try {
- while (bRunning) {
- //TODO: 这里如果地址已经被使用(先前BindException),就会导致serverSocket为空
- connected = serverSocket.accept();
- System.out.println(" THE CLIENT" + " "
- + connected.getInetAddress() + ":"
- + connected.getPort() + " IS CONNECTED ");
- BufferedReader inFromClient = new BufferedReader(
- new InputStreamReader(connected.getInputStream(), "gb2312"));
- //BufferedReader inFromClient = new BufferedReader(
- // new InputStreamReader(connected.getInputStream()));
- //InputStream is = connected.getInputStream();
- outToClient = new PrintWriter(
- connected.getOutputStream(), true);
- while (bRunning) {
- System.out.println("SEND(Type Q or q to Quit):");
- String fromclient = inFromClient.readLine();
- System.out.println("received: " + fromclient);
- if (fromclient != null) {
- if (fromclient.equals("quit")) {
- TcpServer.this.stop();
- break;
- } else {
- // 处理收到的消息fromclient
- }
- }
- }
- }
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- }
- }
- public void send(String req) {
- sendReply(req);
- }
- public void sendReply(String cmd) {
- if (outToClient != null) {
- outToClient.println(cmd);
- outToClient.flush();
- }
- }
- }
转载于:https://blog.51cto.com/memory/1037875