/**
*
*/
package com.duoguo.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* @author shyboy(chao.shen@duoguo.cn)
*
*/
public class Client {
private String hostIp;// 客户端主机IP
private int hostPort;// 客户端主机端口号
private BufferedReader in;// 客户端输入流
private PrintWriter out;// 客户端输出流
/**
* 构造方法
*
* @param hostip
* :IP地址
* @param hostPort
* :端口号
*/
public Client(String hostip, int hostPort) {
this.hostIp = hostip;
this.hostPort = hostPort;
}
/**
* 建立连接
*/
public void setUpConnection() {
try {
Socket client = new Socket(hostIp, hostPort);
in = new BufferedReader(new InputStreamReader(client
.getInputStream()));// 客户端输入流
out = new PrintWriter(client.getOutputStream());// 客户端输出流
} catch (UnknownHostException e) {
System.out.println("找不到相应的主机!");
e.printStackTrace();
} catch (IOException e) {
System.out.println("抛出相应的流异常信息");
e.printStackTrace();
}
}
/**
* 获取文件
*
* @param fileName
* :文件名称
* @return String
*/
public String getFile(String fileName) {
StringBuilder sb = new StringBuilder();
out.println(fileName);
out.flush();
String line = null;
try {
System.out.println("客户端连接成功!");
while ((line = in.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
System.out.println("文件读入失败!");
e.printStackTrace();
}
return sb.toString();
}
/**
* 断开连接
*/
public void tearDownConnection() {
try {
out.close();// 关闭输出流
in.close();// 关闭输入流
} catch (IOException e) {
System.out.println("断开连接失败!");
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
Client client = new Client("127.0.0.1", 9999);
client.setUpConnection();
String fileContent = client.getFile("D:\\hello.txt");
System.out.println("文件内容为:" + "\n" + fileContent);
client.tearDownConnection();
}
}
/**
*
*/
package com.duoguo.util;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
/**
* @author shyboy(chao.shen@duoguo.cn)
*
*/
public class ConnectionHandler implements Runnable {
private Socket socket;
private BufferedReader in;
private PrintWriter out;
private BufferedReader fileBufferedReader;
/**
* 构造器
*
* @param socket
*/
public ConnectionHandler(Socket socket) {
this.socket = socket;
}
/*
* (non-Javadoc)
*
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
try {
in = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
out = new PrintWriter(socket.getOutputStream());
String line = in.readLine();
fileBufferedReader = new BufferedReader(new FileReader(line));
String value = null;
while ((value = fileBufferedReader.readLine()) != null) {
out.println(value);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fileBufferedReader.close();
out.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
*
*/
package com.duoguo.socket;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import com.duoguo.util.ConnectionHandler;
/**
* @author shyboy(chao.shen@duoguo.cn)
*
*/
public class MultiServer {
public int listenerPort;
/**
* 构造器
*
* @param listenerPort
* :监听的端口号
*/
public MultiServer(int listenerPort) {
this.listenerPort = listenerPort;
}
/**
* 接受连接
*/
public void acceptConnection() {
try {
ServerSocket serverSocket = new ServerSocket(listenerPort, 5);
while (true) {
Socket socket = serverSocket.accept();
handleConnection(socket);// 处理连接
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 处理连接
*
* @param socket
* :套接字
*/
public void handleConnection(Socket socket) {
new Thread(new ConnectionHandler(socket)).start();
}
/**
* @param args
*/
public static void main(String[] args) {
MultiServer multiServer = new MultiServer(9999);
multiServer.acceptConnection();// 接受连接
}
}
分享到:
相关推荐
Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...
Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...
《JAVA多线程教学演示系统》是一篇深入探讨JAVA多线程编程的论文,它针对教育领域中的教学需求,提供了一种生动、直观的演示方式,帮助学生更好地理解和掌握多线程技术。这篇论文的核心内容可能包括以下几个方面: ...
### Java多线程操作数据库:深入解析与应用 在当今高度并发的应用环境中,Java多线程技术被广泛应用于处理数据库操作,以提升系统的响应速度和处理能力。本文将基于一个具体的Java多线程操作数据库的应用程序,深入...
### JAVA中的单线程与多线程概念解析 #### 单线程的理解 在Java编程环境中,单线程指的是程序执行过程中只有一个线程在运行。这意味着任何时刻只能执行一个任务,上一个任务完成后才会进行下一个任务。单线程模型...
Java多线程读大文件 java多线程写文件:多线程往队列中写入数据
Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...
综上所述,"java多线程查询数据库"是一个涉及多线程技术、线程池管理、并发控制、分页查询等多个方面的复杂问题。通过理解和掌握这些知识点,我们可以有效地提高数据库操作的效率和系统的响应速度。
java 实现绘制指针时钟 和多线程服务器java 实现绘制指针时钟 和多线程服务器java 实现绘制指针时钟 和多线程服务器java 实现绘制指针时钟 和多线程服务器java 实现绘制指针时钟 和多线程服务器java 实现绘制指针...
Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...
服务器端多线程,各客户端向服务器发送服务请求
java多线程PPT 多线程基本概念 创建线程的方式 线程的挂起与唤醒 多线程问题
### Java多线程分页查询知识点详解 #### 一、背景与需求分析 在实际的软件开发过程中,尤其是在处理大量数据时,如何高效地进行数据查询成为了一个关键问题。例如,在一个用户众多的社交平台上,当用户需要查看...
在Java编程中,多线程是一项关键特性,它允许程序同时执行多个任务,极大地提高了效率。本实例将探讨如何利用Java实现一个具有进度条显示功能的多线程应用。进度条通常用于可视化地表示某个任务的完成程度,这对于长...
Java多线程设计模式是Java开发中的核心概念,它涉及到如何高效、安全地在多个执行线程之间共享资源和协调任务。设计模式是解决特定问题的成熟方案,它们是编程经验的结晶,可以帮助开发者在面临多线程挑战时快速找到...
Java 多线程编程是指在一个程序中可以运行多个线程,以提高程序的执行效率和响应速度。在 Java 中,多线程编程可以通过 Thread 类和 Runnable 接口来实现。 为什么需要多线程? 在单线程程序中,如果某个任务需要...
本案例将深入探讨Java多线程中的关键知识点,包括线程同步、线程通信和线程阻塞。 线程同步是为了防止多个线程同时访问共享资源,导致数据不一致。Java提供了多种同步机制,如synchronized关键字、Lock接口...
在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是...
Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...