java socket多线程编程_多线程Java Socket编程示例

# re: 多线程Java Socket编程示例  回复  更多评论

2010-05-09 14:05 by 诗特林fans

服务器端:

public class MultiThreadServer {

private int port=8821;

private ServerSocket serverSocket;

private ExecutorService executorService;//线程池

private final int POOL_SIZE=10;//单个CPU线程池大小

public MultiThreadServer() throws IOException{

serverSocket=new ServerSocket(port);

//Runtime的availableProcessor()方法返回当前系统的CPU数目.

executorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE);

System.out.println("服务器启动");

}

public void service(){

while(true){

Socket socket=null;

try {

//接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接

socket=serverSocket.accept();

executorService.execute(new Handler(socket));

} catch (Exception e) {

e.printStackTrace();

}

}

}

public static void main(String[] args) throws IOException {

new MultiThreadServer().service();

}

}

class Handler implements Runnable{

private Socket socket;

public Handler(Socket socket){

this.socket=socket;

}

/*private DataOutputStream dos(Socket socket) throws IOException{

OutputStream socketOut=socket.getOutputStream();

return new DataOutputStream(socketOut);

}

private DataInputStream dis(Socket socket) throws IOException{

InputStream socketIn=socket.getInputStream();

return new DataInputStream(socketIn);

}*/

public void run(){

try {

System.out.println("New connection accepted "+socket.getInetAddress()+":"+socket.getPort());

OutputStream os = socket.getOutputStream();

DataOutputStream dos = new DataOutputStream(os);

InputStream is = socket.getInputStream( );

DataInputStream dis=new DataInputStream(is);

new myserverread(dis).start();

new myserverwite(dos).start();

} catch (IOException e) {

e.printStackTrace();

}/*finally{

try {

if(socket!=null)

socket.close();

} catch (IOException e) {

e.printStackTrace();

}

}*/

}

}

class myserverread extends Thread{

private DataInputStream dis;

public myserverread (DataInputStream dis){

this.dis=dis;

}

public void run(){

String info;

try{

while(true)

{

info=dis.readUTF();

System.out.println("对方说"+info);

if (info.equals("bye")){

System.out.println("对方下线,程序退出");

System.exit(0);}

}

}

catch (Exception e){e.getStackTrace();}

}

}

class myserverwite extends Thread{

private DataOutputStream dos;

public myserverwite (DataOutputStream dos){

this.dos=dos;

}

public void run(){

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

String info;

try{

while(true)

{

info=br.readLine();

dos.writeUTF(info);

if (info.equals("bye")){

System.out.println("自己下线,程序退出");

System.exit(0);}

}

}

catch (Exception e){e.getStackTrace();}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值