2015/6/23

[Java]Examples of multithreaded Socket Server(多線程的Socket Server範例)

Server繼承Thread是為了多線程,如果沒有需要可以不繼承
Client繼承Thread是為了模擬多線程

Server code:



package com.test;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer extends Thread {

 public static final int LISTEN_PORT = 8188;
 Socket socket = null;

 public SocketServer(Socket socket) {
  this.socket = socket;
 }

 public void run() {
  InputStream in = null;
  OutputStream out = null;
  try {
   in = socket.getInputStream();
   out = socket.getOutputStream();
   byte[] buffer = new byte[1024];

   int len = in.read(buffer, 0, 1024);
   String inData = new String(buffer);
   System.out.println("request="+inData);
   String response="Server return:"+inData;
   System.out.println("response="+response);
   out.write(response.getBytes());
   out.flush();
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    if (in != null) {
     in.close();
    }
    if (out != null) {
     out.close();
    }
    if (socket != null) {
     socket.close();
    }
   } catch (Exception closeErr) {
    System.out.println("close socket fail");
   }
  }

 }

 public static void main(String[] args) {
  ServerSocket server = null;
  Socket socket = null;
  try {
   server = new ServerSocket(LISTEN_PORT, 0,InetAddress.getByName("127.0.0.1"));
   System.out.println("started: " + server);
   while (true) {
    // listen request
    socket = server.accept();
    // new thread execution services
    SocketServer thread = new SocketServer(socket);
    thread.start();
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

}
Client code:
package com.test;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;

public class SocketClient extends Thread {
 public static final int PORT = 8188;

 public void run() {
  int i = 1;
  InetAddress addr = null;
  Socket socket = null;
  OutputStream out = null;
  InputStream in = null;
  while (true) {
   try {
    socket = new Socket();
    addr = InetAddress.getByName("127.0.0.1");
    socket.connect(new InetSocketAddress(addr, PORT), 30000);
    out = socket.getOutputStream();
    out.write(("client sent hello " + i).getBytes());
    out.flush();
    in = socket.getInputStream();
    byte[] buffer = new byte[1024];
    int len = in.read(buffer, 0, 1024);
    String inData = new String(buffer);
    System.out.println(inData);
    i++;
   } catch (Exception e) {
    e.printStackTrace();
   } finally {
    try {
     if (in != null) {
      in.close();
     }
     if (out != null) {
      out.close();
     }
     if (socket != null) {
      socket.close();
     }
    } catch (IOException e) {
     e.printStackTrace();
    }
   }

  }
 }

 public static void main(String[] args) throws Exception {
  SocketClient SocketClient1 = new SocketClient();
  SocketClient SocketClient2 = new SocketClient();
  SocketClient1.start();
  SocketClient2.start();
 }
}

沒有留言:

張貼留言