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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
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();
}
}
}
}
|
客户端代码:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
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 服务器与客户端实现示例相关推荐
- bio java 例子_JAVA BIO 服务器与客户端实现示例
代码只兼容JAVA 7及以上版本. 服务器端代码:package com.stevex.app.bio; import java.io.BufferedReader; import java.io.I ...
- Java实现服务器和客户端简单通信
Java中网络编程这一块有封装的类库,使用简单,了解原理可以教容易实现服务器和客户端的简单通信. 在编程之前,首先要需要对TCP/IP协议有一定的了解,需要知道Socket套接字的作用以及用法,这个可 ...
- java 函数式编程 示例_Java套接字编程–套接字服务器,客户端示例
java 函数式编程 示例 Welcome to Java Socket programming example. Every server is a program that runs on a s ...
- 【Java 网络编程】TCP 数据传输示例 ( 客户端参数设置 | 服务器端参数设置 | ByteBuffer 存放读取数据类型 )
文章目录 I 客户端代码示例 II 服务器端代码示例 III 运行结果 I 客户端代码示例 import java.io.IOException; import java.io.InputStream ...
- 【Java 网络编程】UDP 服务器 与 客户端持续交互 案例
文章目录 I UDP 交互原理 II UDP 服务器端代码示例 III UDP 客户端代码示例 IV 服务器 客户端 运行结果 I UDP 交互原理 1. UDP 单播传输流程 : A 给 B 发送数 ...
- 【Java 网络编程】TCP 服务器端 客户端 简单示例
文章目录 I IntelliJ IDEA 创建 Java 项目 II 客户端 Socket 创建 III Socket 客户端连接服务器端 IV Socket 两个端点信息获取 V 控制台人机交互 V ...
- java怎么上传文件到web服务器_Java客户端通过Http发送POST请求上传文件到web服务器...
http://www.cnblogs.com/WilliamJiang/archive/2012/04/29/2475883.html 1.朋友的一个需求,让我给他实现,需求是这样的,需要用ASP.n ...
- 实现服务器和客户端数据交互,Java Socket有妙招
摘要:在Java SDK中,对于Socket原生提供了支持,它分为ServerSocket和Socket. 本文分享自华为云社区<Java Socket 如何实现服务器和客户端数据交互>, ...
- java socket 编程 客户机服务器_Java Socket编程服务器响应客户端实例代码
通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: import java.io.BufferedReader; import java.io.IOException; imp ...
最新文章
- 网站用户登录验证:Servlet+JSP VS Struts书剑恩仇录
- C#基础知识(个人笔记)
- Django——WEB三层架构与MVC
- oracle服务器不识别tc服务,记一次ORACLE无法启动登陆事故
- 【渝粤教育】国家开放大学2019年春季 3896人文英语1 参考试题
- [js] axios拦截器原理是什么?
- 【转】阿里技术专家详解DDD系列 第二讲 - 应用架构
- 关于网站注册账号时提示Server 对象 错误 'ASP 0177 : 800401f3'
- 编码神器 Sublime Text 包管理工具及扩展大全
- Linux Sed简介
- 哪些大学有计算机动漫专业,计算机专业考研有哪些值得推荐的院校?
- D-Bus 性能分析
- 地统计学插值 | IDW(反距离)和Kriging(克里金)
- CorelDRAWX4的VBA插件开发(九)循环的套用和统一尺寸
- GPS 原始坐标 (WGS-84) ddmm.mmmm 格式转高德(GCJ)百度(BD09)坐标
- 微信新功能,最牛的不是“斗图”!
- 传说之下手机如何使用debug_传说之下手机版怎么设置按键 按键设置方法
- 安卓 获取rtsp流 截屏_安卓星雨视频+星火电视盒子版+安卓文件闪传+安卓截屏大师...
- Cadence Allegro使用过程中出现的常见问题-原理图和PCB
- 将xlsx内容转成json
热门文章
- flex java 全局拦截_flex + java 过滤敏感词
- python configuration is still_通过Python配置关闭Release优化
- grep 与条件_小白贴:使用 grep 命令搜索多个字符串
- 12C OCP IZO-62 题库(8月以前)
- 如何通过 macOS 恢复功能重新安装 macOS
- java hashtable排序_java中哈希表中有迭代器模式的实现,可以认为其是顺序表吗?...
- linux里c库和gnu c库,Linux下的C的库文件和头文件有什么区别-
- java关闭inputstream_关闭Java InputStreams
- java core日志在哪里_java-如何在未启用日志记录功能的情况下在...
- 局域网中架设Win 2003终端服务器