需求:与socket编程(一)相同的需求
客户端代码如下:
package com.socket.clientsocket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Sclient {
/**
* @param args
*/
protected BufferedReader socketReader;
protected PrintWriter socketWriter;
protected String hostIp;
protected int hostPort;
public Sclient(String ahostIp,int ahostPort){
this.hostIp = ahostIp;
this.hostPort = ahostPort;
}
public void setUpConnection(){
try {
//1.创建Socket,建立连接
Socket socket = new Socket(hostIp,hostPort);
//2.获取输入流和输出流,并进行封装
socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
socketWriter = new PrintWriter(socket.getOutputStream());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void tearDownConnection(){
try {
socketReader.close();
socketWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//根据需求,对流进行处理
public String getFile(String fileNameToGet){
StringBuffer sb = new StringBuffer();
socketWriter.println(fileNameToGet);
socketWriter.flush();
String line = null;
try {
while((line = socketReader.readLine()) != null){
sb = sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
public static void main(String[] args) {
//创建客户端
Sclient client = new Sclient("198.27.0.166",8200);
//建立连接
client.setUpConnection();
//需求操作
String content = client.getFile("c:\\log.txt");
//关闭连接
client.tearDownConnection();
}
}
服务器端代码如下:
package com.socket.multiserversocket;
import java.io.IOException;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
public class SserverM {
/**
* @param args
*/
protected int listenPort = 3000;
public static void main(String[] args) {
// TODO Auto-generated method stub
SserverM server = new SserverM();
server.acceptConnections();
}
//将处理丢给一个实现Runnable接口类的新线程
public void handleConnection(Socket connectionToHandle) {
new Thread(new ConnectionHander(connectionToHandle)).start();
}
public void acceptConnections() {
try {
//5为最多等待客户端数目,连上正在处理的请求,总共能处理6个,如果再有请求,将拒绝连接
ServerSocket server = new ServerSocket(listenPort, 5);
Socket incomingConnection = null;
while (true) {
incomingConnection = server.accept();
handleConnection(incomingConnection);
}
} catch (BindException e) {
System.out.println("Unable to bind to port " + listenPort);
} catch (IOException e) {
System.out.println("Unable to instantiate a ServerSocket on port: " + listenPort);
}
}
}
实现Runnable接口的处理器
package com.socket.multiserversocket;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
public class ConnectionHander implements Runnable {
protected Socket incommingSocket;
public ConnectionHander(Socket aIncommingSocket){
this.incommingSocket = aIncommingSocket;
}
public void run() {
try {
InputStream inputFromSocket = this.incommingSocket.getInputStream();
OutputStream outputToSocket = this.incommingSocket.getOutputStream();
BufferedReader streamReader = new BufferedReader(new InputStreamReader(inputFromSocket));
FileReader fileReader = new FileReader(new File(streamReader.readLine()));
BufferedReader bufferedFileReader = new BufferedReader(fileReader);
PrintWriter socketWriter = new PrintWriter(outputToSocket);
String line = null;
while((line = bufferedFileReader.readLine()) != null){
socketWriter.println(line);
}
streamReader.close();
fileReader.close();
socketWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
服务器端采用多线程并发模式,服务器可以同时接收多个客户端的请求,并且回复客户端相同的信息。编译时应该使用命令“gcc server.c -o server -lpthread ”和“gcc client.c -o client -lpthread”
(4)关闭套接字 四、系统流程图 五、系统设计 本课程设计按照系统的具体功能要求,首先应用Socket编程创建客户端和服务器端, 每多个客户端服务器端就会相因的创建一个线程,它们之间通过这个连接来实现数据通 信;...
一个Socket实例代表了TCP连接的一个客户端,而一个ServerSocket实例代表了TCP连接的一个服务器端,一般在TCP Socket编程中,客户端有多个,而服务器端只有一个,客户端TCP向服务器端TCP发送连接请求,服务器端的...
java多线程socket通信、java网络编程学习心得,基本实现多线程通信,其他问题的欢饮反馈。应付作业有余了: 应用多线程实现服务器与多客户端之间的通信: ① 服务器端创建ServerSocket,循环调用accept()等待客户端...
其中采用Java 的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送请求. 注意,此为学习笔记,可以作为参考学习使用,不建议商业使用或生产使用。 废话不多说,直接上代码。
采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送请求. 1.服务端 package localSocket; import java.io.BufferedReader; import java.io.IOException; ...
1)设计程序,分别构建通信的两端:服务器端和客户端应用程序,套接字类型为面向连接的Socket,自己构建双方的应答模式,实现双方的数据的发送和接收(S发给C,C发给S)。 2)服务端程序能响应单个或任意多个客户端连接...
本系统是基于JAVA开发平台,运用Socket网络编程,I/O文件流,线程,Swing图形界面等技术,实现的一套标准化考试系统。通过该系统可以完成多个科目的标准化考试工作。 该系统共分为三个模块:考生客户端,服务器端和...
服务器端:使用Java Socket编程实现服务器端,监听客户端连接请求,接收和处理客户端发送的消息,并进行转发。 数据库存储:采用关系型数据库(如MySQL)存储用户信息、好友关系等数据。 多线程处理:使用多线程...
摘要:本设计通过研究讨论,设计基于socket编程的网络聊天系统,服务器端采用多线程并发服务方式,多客户端能同时连接服务器,并且客户端之间能进行通信。程序通过了验证与测试,证明了系统的可用性、易用性、完善性...
多线程处理:通过多线程实现并发处理多个文件传输请求,提高传输效率。 异常处理:处理网络异常、文件读写异常等,确保文件传输的稳定性和可靠性。 应用领域: Java文件传输的实现可以应用于各个领域,包括但不限于...
2. **多线程**:服务器端使用多线程处理客户端的连接请求,确保程序能够同时处理多个用户的聊天请求。 3. **数据持久化**:使用SQLite数据库存储用户信息和聊天记录,确保数据的安全性和完整性。 4. **易于扩展**:...
参考MSDN上的Socket例程,以Form为框架,写的关于Socket通信的一个例子,有SocketServer(服务器端)和SocketClient(客户端)两部分,对理解多线程和Socket基本编程有一定的帮助,其中仍有一些地方有待改进。
本文首先介绍了可以实现局域网监控基础Socket编程的基本概念及其调用的方法,多线程的相关概念及套接字的使用方法,接着从建立Socket套接字开始,完成各功能模块的系统实施,主要包括从鼠标锁定,到关机,到时时截屏...
基于TCP的socket编程的服务器端程序流程如下: 1、创建套接字 2、将套接字绑定到一个本地地址和端口号上(bind) 3、将套接字设为监听模式,准备接受客户请求(listen) 4、等待客户请求,请求到来时接受请求,建立...
4.4.1 多线程编程实例 127 4.4.2 Linux下线程创建函数pthread_create() 129 4.4.3 线程的结束函数pthread_join()和pthread_exit() 129 4.4.4 线程的属性 130 4.4.5 线程间的互斥 132 4.4.6 线程中使用信号...
服务器端技术:使用Java技术实现服务器端的业务逻辑和会议管理功能,如多线程编程、数据持久化等。 安全性考虑: 数据加密:对视频、音频和聊天数据进行加密处理,确保数据的机密性和完整性。 身份认证:采用安全的...
所谓客户端请求,是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字...
第二部分对高性能服务器编程的核心要素进行了全面深入的剖析,包含Linux网络编程API、高级I/O函数、Linux服务器程序规范、高性能服务器程序框架、I/O复用、信号、定时器、高性能I/O框架库Libevent、多进程编程、多...