JAVA BIO 服务器与客户端实现示例
2014-11-21 22:44
387 查看
代码只兼容JAVA 7及以上版本。
服务器端代码:
客户端代码:
服务器端代码:
package com.stevex.app.bio; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import javax.net.ServerSocketFactory; public class XiaoNa { public static void main(String[] args){ XiaoNa xiaona = new XiaoNa(); ServerSocket serverSocket = null; Socket socket = null; try { //可以设置客户连接请求队列的长度,比如5,队列长度超过5后拒绝连接请求 //serverSocket = ServerSocketFactory.getDefault().createServerSocket(8383, 5); serverSocket = ServerSocketFactory.getDefault().createServerSocket(8383); while(true){ try{ //监听直到接受连接后返回一个新Socket对象 socket = serverSocket.accept();//阻塞 //new一个线程处理连接请求 new Thread(xiaona.new Worker(socket)).start();; } catch (Throwable e) { //防止发生异常搞死服务器 e.printStackTrace(); } } } catch (IOException e) { e.printStackTrace(); } finally{ try { if(socket != null){ socket.close(); } } catch (IOException e) { e.printStackTrace(); } } } private static String getAnswer(String question){ String answer = null; switch(question){ case "who": answer = "我是小娜"; break; case "what": answer = "我是来帮你解闷的"; break; case "where": answer = "我来自外太空"; break; default: answer = "请输入 who, 或者what, 或者where"; } return answer; } private class Worker implements Runnable{ private Socket socket; public Worker(Socket socket){ this.socket = socket; } @Override public void run() { BufferedReader reader = null; PrintWriter writer = null; try { reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); writer = new PrintWriter(socket.getOutputStream()); String question = reader.readLine();//没有内容会阻塞 while(!question.equals("OVER")){ String answer = getAnswer(question); writer.println(answer); question = reader.readLine(); } writer.println("OVER");//OVER作为操作完成暗号 writer.flush(); if(writer != null){ writer.close(); } if(reader != null){ reader.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
客户端代码:
package com.stevex.app.bio; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class Client { public static void main(String[] args) { Client c = new Client(); //种20个线程发起Socket客户端连接请求 for(int i=0; i<20; i++){ new Thread(c.new Worker()).start(); } } private class Worker implements Runnable{ @Override public void run() { Socket socket = null; BufferedReader reader = null; PrintWriter writer = null; try { //创建一个Socket并连接到指定的目标服务器 socket = new Socket("localhost", 8383); reader = new BufferedReader(new InputStreamReader( socket.getInputStream())); writer = new PrintWriter(socket.getOutputStream()); writer.println("who"); writer.println("what"); writer.println("where"); writer.println("OVER");//OVER作为操作完成暗号 writer.flush(); String answer = reader.readLine(); //没有内容会阻塞 while(! answer.equals("OVER")){ System.out.println(Thread.currentThread().getId() + "---Message from server:" + answer); answer = reader.readLine(); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (writer != null) { writer.close(); } if (reader != null) { reader.close(); } if (socket != null) { socket.close(); } } catch (IOException e) { e.printStackTrace(); } } } } }
相关文章推荐
- JAVA BIO 服务器与客户端实现示例
- JAVA NIO 服务器与客户端实现示例 推荐
- JAVA NIO 服务器与客户端实现示例
- JAVA NIO 服务器与客户端实现示例(代码1)
- JAVA AIO 服务器与客户端实现示例(代码2)
- JAVA AIO 服务器与客户端实现示例
- JAVA AIO 服务器与客户端实现示例
- Java 利用套接字Socket实现简单的服务器与客户端通信
- Thrift java服务器与客户端示例
- Java多线程实现多个客户端同时与服务器进行TCP通信
- 智能点餐系统开发纪实1-----java服务器搭建,android客户端实现通信
- Java 利用 Socket 实现服务器客户端聊天
- Java实现单个客户端与服务器UDP通信
- Thrift java服务器与客户端示例 - john c - 博客园
- Java实现简单的Socket服务器与客户端字符串通讯(适合初学者阅读)
- java使用多线程编程,实现socket服务器客户端交互
- Java实现简单的Socket服务器与客户端字符串通讯(适合初学者阅读)
- 用Java实现一个简单的服务器与客户端程序
- Java实现简单的Socket服务器与客户端字符串通讯(适合初学者阅读)
- java做服务器,android做客户端,实现数据传输