java socket编程(多任务处理)

上一篇 / 下一篇  2012-04-12 00:09:56 / 个人分类:java

 

一客户一线程的服务器简单代码示例,有新的客户端连接则启动一个新的线程

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Logger;

public class TCPEchoServerThread {
 
 public static void main(String[] args) throws IOException {
  
  if(args.length != 1){
   throw new IllegalArgumentException("Parameter(s): <Port>");
  }
  
  int echoServPort = Integer.parseInt(args[0]);
  
  ServerSocket servSock = new ServerSocket(echoServPort);
  
  Logger logger = Logger.getLogger("practical");
  
  while(true){
   Socket clntSock = servSock.accept();
   
   Thread Thread = new Thread(new EchoProtocol(clntSock, logger));
   Thread.start();
   logger.info("Created and started Thread" + Thread.getName());
  }
 }
}

 

其中EchoProtocol代码如下:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

public class EchoProtocol implements Runnable {
 private static final int BUFSIZE = 32;
 private Socket clntSock;
 private Logger logger;
 
 public EchoProtocol(Socket clntSock, Logger logger) {
  this.clntSock = clntSock;
  this.logger = logger;
 }
 
 public static void handleEchoClient(Socket clntSock, Logger logger){
  try{
   InputStream in = clntSock.getInputStream();
   OutputStream ut = clntSock.getOutputStream();
   
   int recvMsgSize;
   int totalBytesEchoed = 0;
   byte[] echoBuffer = new byte[BUFSIZE];
   
   while((recvMsgSize = in.read(echoBuffer)) != -1){
    out.write(echoBuffer, 0, recvMsgSize);
    totalBytesEchoed += recvMsgSize;
   }
   
   logger.info("Client " + clntSock.getRemoteSocketAddress() + ", echoed" + totalBytesEchoed + " bytes.");
  }catch(IOException ex){
   logger.log(Level.WARNING, "Exception in echo protocol", ex);
  }finally{
   try{
    clntSock.close();
   }catch(IOException e){
   }
  }
 }
 
 public void run() {
  handleEchoClient(clntSock, logger);
 }
}

 

运行情况,服务器先运行

E:\socket>java TCPEchoServerThread 9080
2012-4-12 0:08:31 TCPEchoServerThread main
信息: Created and started ThreadThread-1

客户端就是之前日志的程序,

E:\socket>java TCPEchoClient 192.168.1.100 test2 9080
Connected to server ... sending echo string
Received: test2

 

 


TAG:

 

评分:0

我来说两句

Open Toolbar