socket连接,传输文件,读写excel,txt,多线程处理请求

本文介绍了一个使用Java Socket实现的客户端-服务端程序,服务端通过多线程处理来自客户端的连接请求。程序支持接收和生成Excel及TXT文件,详细代码展示了如何进行文件读写操作。
摘要由CSDN通过智能技术生成

        最近写了一个小程序,关于socket连接的,分为客户端和服务端,服务端在指定的端口等待客户端连接,针对不同的客户端建立一个线程去处理请求,客户端则想服务端建立连接,这个可以传输excel文件,也可以生成excel文件,具体看代码吧,注释的挺清楚的。。。

一共4个文件。SocketClient.java代表客户端对象,SockeServer.java代表服务端,Connection.java为多线程处理,ReaderWriterFile.java为处理读写文件的对象。

SocketClient.java

package socket;

import java.io.*;
import java.net.*;

public class SocketClient {
	public Socket soc;// 与服务端连接的套接字对象
	public String host;// 连接到得主机
	public int port;// 端口

	public SocketClient(String host, int port) {
		super();
		this.host = host;
		this.port = port;
	}

	// 初始化
	public void init() {
		try {
			// 连接到指定的主机的指定端口
			soc = new Socket(host, port);
			System.out.println("connecting" + soc);
			System.out.println("连接到服务器。。。");
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			System.out.println("未知服务器异常: " + e);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	// 进行连接处理
	public void connect() {
		try {
			// 封装从服务端的输入流
			BufferedReader in = new BufferedReader(new InputStreamReader(soc.getInputStream()));
			// 封装到服务端的输出流
			PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(soc.getOutputStream())), true);
			// 从服务端收到的信息
			String receive_msg = in.readLine();
			System.out.println("服务器说:" + receive_msg);
			// 封装控制台输入流
			BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));

			// 不断的与服务端进行交互,直到客户端输入了quit
			while (true) {
				// 从控制台读取数据
				String send_msg = stdin.readLine().trim();
				// 将读取的数据发送到服务端
				out.println(send_msg);
				// 如果输入离开则断开连接,释放资源
				if ("quit".equals(send_msg)) {
					try {
						in.close();
						out.close();
					} catch (IOException e) {
						System.out.println("socket关闭异常。。" + e);
					}
					break;
				}
				// 如果是请求文件
				if (send_msg.trim().startsWith("get")) {
					System.out.println("从服务端获取的文件内容如下:");
					// 将读取到的所有字符串StringBuffer穿起来
					receive_msg = null;
					StringBuffer result = new StringBuffer();
					// 不断获取文件内容,直到遇到文件传输结束标志(end的md5的16位加密结果)
					while (!(receive_msg = in.readLine()).equals("15b86f2d013b2618")) {
						result.append(receive_msg + "\n");
					}
					System.out.println(result.toString() + "\n文件读取结束!");
					/
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值