代码只兼容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();

}

}

}

}

}

bio java 例子_JAVA BIO 服务器与客户端实现示例相关推荐

  1. java getbasicremote_Vue+Java 通过websocket实现服务器与客户端双向通信操作

    1. vue代码 methods: { //在方法里调用 this.websocketsend()发送数据给服务器 onConfirm () { //需要传输的数据 let data = { code ...

  2. java 网页通讯_Vue+Java 通过websocket实现服务器与客户端双向通信操作

    1. vue代码 methods: { //在方法里调用 this.websocketsend()发送数据给服务器 onConfirm () { //需要传输的数据 let data = { code ...

  3. java reactor模式例子_JAVA BIO,NIO,Reactor模式总结

    传统同步阻塞I/O(BIO) 在NIO之前编写服务器使用的是同步阻塞I/O(Blocking I/O).下面是一个典型的线程池客服端服务器示例代码,这段代码在连接数急剧上升的情况下,这个服务器代码就会 ...

  4. JAVA之socket编程服务器与客户端通信--实现简易聊天室

    本文将介绍TCP和UDP两种服务器与客户端之间的通信协议 1.首先介绍TCP和UDP分别是什么:TCP(Transfer Control Protocol) 是传输控制协议的缩写,被称 TCP / I ...

  5. Java使用Socket实现服务器与客户端通信

    最近在写一个Android 网络局域网通信功能,客户端将数据发送到服务器后,服务器再将这个数据转发给其他客户端为了方便起见,写了一个工具类,废话不多说,上代码,这段代码是基于Gson 的,需要在And ...

  6. 【Java 网络编程】TCP 服务器端 客户端 简单示例

    文章目录 I IntelliJ IDEA 创建 Java 项目 II 客户端 Socket 创建 III Socket 客户端连接服务器端 IV Socket 两个端点信息获取 V 控制台人机交互 V ...

  7. java entryset()_Java TreeMap entrySet()用法及代码示例

    Java中的java.util.TreeMap.entrySet()方法用于从树图中包含的相同元素中创建一个集合.它本质上返回树图的集合视图,或者我们可以创建一个新集合并将Map元素存储到其中. 用法 ...

  8. JAVA BIO 服务器与客户端实现示例

    代码只兼容JAVA 7及以上版本. 服务器端代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...

  9. java udp 服务器_Java UDP 服务器与客户端的问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package UDP_Client; import java.io.BufferedReader; import java.io.IOException ...

最新文章

  1. python快速编程入门教程-终于懂得python快速编程入门教程
  2. 如何基于 K8s 构建下一代 DevOps 平台?
  3. ASP.NET Core - 基于IHttpContextAccessor实现系统级别身份标识
  4. 检查各计算机所属工作组ip,如何在Win8.1/RT 8.1中添加语言或键盘
  5. c++for循环求最大公约数_C/C++编程笔记:C语言 for 循环精讲!实例讲解带你吃透...
  6. QUIC - 低时延互联网传输层协议
  7. [HTTP] 重定向的302,301
  8. CentOS7:搭建SVN + Apache 服务器
  9. 穹顶之下 众信金融邀您共植树助环保
  10. asp.net后台正则表达式验证手机号码邮箱
  11. vim使用指北 ---- Global Replacement
  12. sap字段及描述底表_SAP各模块字段与表的对应关系.
  13. 比较两个字符数组是否相等_Java比较两个数组是否相等(equals())
  14. nodejs后台系列--第四篇--koa
  15. 软件测试--移动应用主要针对软测比赛(教程)
  16. 2013年节假日放假安排时间表
  17. Kotlin是如何帮助你避免内存泄漏的?
  18. 游戏ui设计,游戏ui设计需要学什么
  19. Linux中vi命令编辑文件时显示行号
  20. 国家普通话水平测试官方手机软件,普通话测试软件 – 免费手机普通话测试软件,用手机模拟测试普通话水平[Android]...

热门文章

  1. 反向输出dna序列_蛋白质序列反向(逆向)翻译成DNA序列-在线工具
  2. homelede软路由设置方法_斐讯无线路由器怎么设置 斐讯无线路由器设置方法【详解】...
  3. as转html5工具,将keras的h5模型转换为tensorflow的pb模型
  4. 阿米洛键盘取消win_阿米洛花旦娘静电容V2键盘测评:不止是一把好看的键盘
  5. 跨语言、多语言信息检索
  6. jq中查找上级_【节能学院】电能管理系统在福州三岐小学项目中的设计及应用...
  7. vue安装教程及简介
  8. 《鸿蒙理论知识06》HarmonyOS概述之应用开发基础知识
  9. vue 扫码页面限制区域_Vue.js 单页面多路由区域操作的实例详解
  10. java用redis缓存的步骤_详解在Java程序中运用Redis缓存对象的方法|chu