下面是多线程的;每次服务端接受请求,会创建一个线程专门处理这个请求;
虽然是多线程的,但还是阻塞,相当于单线程处理模式
public class TimeServer { public static void main(String[] args) { int port = 8088;//端口号
ServerSocket server = null;
try {
server = new ServerSocket(port); System.out.println("The time server is start in port:"+port);
Socket socket = null;
while(true){
//监听客户端,客户端向服务端发送请求,接收
socket = server.accept();
//当监听到客户端请求,服务端会启动一个线程,处理客户端相关业务;服务器端实现多线程
new Thread(new TimeServerHandler(socket)).start();
} } catch (IOException e) {
e.printStackTrace();
}finally{
if(server != null){
System.out.println("the server close");
try {
server.close();
} catch (IOException e) {
e.printStackTrace();
}
server = null;
}
}
}
}
---
服务器处理类;new TimeServerHandler(socket)将socket传入进去,然后生成输入、输出流出处理
public class TimeServerHandler implements Runnable{
private Socket socket; public TimeServerHandler(Socket socket){
this.socket = socket;
} @Override
public void run() {
BufferedReader in = null;
PrintWriter out = null; try {
in = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
out = new PrintWriter(this.socket.getOutputStream());
String currentTime = null;
String body = null;
while(true){
//读取客户端信息
body = in.readLine();
if(body == null)
break;
System.out.println("the time server receive order:"+body);
currentTime = "QUERY TIME ORDER".equalsIgnoreCase(body) ?
new java.util.Date(System.currentTimeMillis()).toString() : "BAD ORDER";
out.println(currentTime);
} } catch (Exception e) {
if(in != null){
try {
in.close();
} catch (IOException e1) {
e1.printStackTrace();
}
} if(out != null){
out.close();
} if(socket != null){
try {
socket.close();
} catch (IOException e1) {
e1.printStackTrace();
}
this.socket = null;
} }
} }
------
客户端
public class TimeClient { public static void main(String[] args) { int port = 8088;//端口
BufferedReader in = null;
PrintWriter out = null;
Socket socket = null;
try {
//根据ip地址和端口连接服务器;
socket = new Socket("127.0.0.1", 8088);
//使用IO流读取或写入信息
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream());
out.println("QUERY TIME ORDER");
System.out.println("send order 2 server succeed");
String resp = in.readLine();
System.out.println("NOW IS:"+resp);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(out != null){
out.close();
}
if(in != null){
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(socket != null){
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
socket = null;
}
}
}
}

多线程服务端与客户端通信(IO是阻塞的)_02的更多相关文章

  1. Netty 学习(二):服务端与客户端通信

    Netty 学习(二):服务端与客户端通信 作者: Grey 原文地址: 博客园:Netty 学习(二):服务端与客户端通信 CSDN:Netty 学习(二):服务端与客户端通信 说明 Netty 中 ...

  2. C#Winform窗体实现服务端和客户端通信例子(TCP/IP)

    Winform窗体实现服务端和客户端通信的例子,是参考这个地址 http://www.cnblogs.com/longwu/archive/2011/08/25/2153636.html 进行了一些异 ...

  3. (C#:Socket)简单的服务端与客户端通信。

    要求:1.可以完成一对一的通信:2.实现服务端对客户端一对多的选择发送:3.可以实现服务端的群发功能:4.可以实现客户端文件的发送: 要点:服务器端:第一步:用指定的端口号和服务器的ip建立一个End ...

  4. C# Socket服务端与客户端通信(包含大文件的断点传输)

    步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤:   (1)建立一个Socket   (2)接收 ...

  5. java网络编程-单线程服务端与客户端通信

    该服务器一次只能处理一个客户端请求;p/** * 利用Socket进行简单服务端与客户端连接 * 这是服务端 */public class EchoServer { private ServerSoc ...

  6. java的服务端与客户端通信(2)

    一.Socket连接与HTTP连接   1.1Socket套接字 套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元.它是网络通信过程中端点的抽象表示,包含进行网络通信 ...

  7. java的服务端与客户端通信(1)

    一.理解socket 1.1什么是socket? socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络 ...

  8. NIO服务端和客户端通信demo

    代码转自 https://www.jianshu.com/p/a9d030fec081 服务端: package nio; import java.io.IOException; import jav ...

  9. python 学习笔记_2 模拟socket编程 服务端、客户端通信(参考核心编程2代码实现)

    服务器端代码实现: #!/usr/bin/env python#coding=gbk'''接收客户端字符串,在字段串前面打上当前时间,然后返回server端采用 python2 linux下调试运行客 ...

随机推荐

  1. Azure DevOps Server/Team Foundation Server

    TFS wasn't designed specifically to support a requirements management process. Epics are like big st ...

  2. http options 请求

  3. org.apache.commons等常用工具学习

    StringUtils 1,StringUtils.isNotBlank isNotEmpty : 判断某字符串是否非空 StringUtils.isNotEmpty(null) = false St ...

  4. http://blog.csdn.net/u012905422/article/details/53340260

    轉自:http://blog.csdn.net/u012905422/article/details/53340260 对于python2.7版本,很多教程(如http://stackoverflow ...

  5. Error configuring application listener of class org.springframework.web.cont

    解决方案 1:   1. 打开工程属性对话框,到Deployment Assembly页面,点击Add   2. 选择Jave Build Path Entries 3. 把程序用于的Library加 ...

  6. ORA-00984: 列在此处不允许 SQL parse error location

      ORA-00984: 列在此处不允许SQL parse error location Oracle 插入数据的时候一直提示列在此处不允许.网上搜索答案说是类型不匹配的多,但我的错误确是一个低级错误 ...

  7. C6678的PLL模块设置

    这部分讲解的是Main PLL和 PLL Controller的配置,主要介绍怎样提供DSP核 C66X CorePac需要的工作时钟:C6678除了Main PLL,还有 DDR3 PLL.PASS ...

  8. v4l2框架分析

    参考:https://www.cnblogs.com/fengong/p/4424823.html    http://www.cnblogs.com/fengong/p/4424895.html 一 ...

  9. Java Web开发Session超时设置

    在Java Web开发中,Session为我们提供了很多方便,Session是由浏览器和服务器之间维护的.Session超时理解为:浏览器和服务器之间创建了一个Session,由于客户端长时间(休眠时 ...

  10. 【dbdiff】数据库比对工具安装

    安装git 忽略 安装visual c++组件(和mysql workbench需要的一样) https://www.microsoft.com/en-us/download/details.aspx ...