java TCP协议多线程传输(文件传输1对多)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43599377/article/details/102415198

今天来写一个简单的多线程传输,一个服务器,一个客户端传送基本数据,一个客户端传输文件
服务器线程端

package com.sheng.tetst1;
//网络编程多线程

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.nio.Buffer;

public class ServerThread extends Thread {
	Socket socket = null;

	public ServerThread(Socket socket) {
		this.socket = socket;
	}

	// 执行线程的操作
	public void run() {

		File file2 = new File("C:\\Users\\lenovo\\Desktop\\Demo3\\6661.txt");
		try {
			DataInputStream dis = new DataInputStream(socket.getInputStream());
			DataOutputStream dos = new DataOutputStream(new FileOutputStream(file2));
			// DataOutputStream dos1 = new DataOutputStream(socket.getOutputStream());
			byte[] buf = new byte[1024 * 9];
			int len = 0;

			// 获取输出流
			OutputStream os = socket.getOutputStream();
			PrintWriter pw = new PrintWriter(os);
			pw.write("你好帅");

			while ((len = dis.read(buf)) != -1) {
				System.out.println(new String(buf, 0, len));

			}
			pw.flush();
			pw.close();
			dos.flush();
			System.out.println("文件接受结束,,,,");
			dis.close();
			dos.close();

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	
	}

}

服务器端

package com.sheng.tetst1;

import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
	
	public static void main(String[] args) {
		//创建一个服务器端的ServerSocket,指定绑定的端口
		try {
			int count=0;
			ServerSocket serverSocket=new ServerSocket(8888);
			//开始监听
			System.out.println("服务器启动");
			Socket socket=null;
			while(true) {
				socket=serverSocket.accept();
				ServerThread serverThread=new ServerThread(socket);
				serverThread.start();
				count++;
				System.out.println("客户端的数量是:"+count);
				
				InetAddress address=socket.getInetAddress();
				System.out.println("当前客户的ip地址是:"+address);
				
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

客户端1:传送基本数据

package com.sheng.tetst1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

//
public class Client {
	public static void main(String[] args) {
		try {
			//1.创建客户端Socket,指定服务器地址和端口
			Socket socket=new Socket("localhost",8888);
			//2.获取输出流
			System.out.println("我是客户端");
			OutputStream os=socket.getOutputStream();
			PrintWriter pw=new PrintWriter(os);
			pw.write("我是客户端1");
			pw.flush();
			socket.shutdownOutput();
			
			//3.获取输入流
			InputStream is=socket.getInputStream();
			InputStreamReader isr=new InputStreamReader(is);
			BufferedReader br=new BufferedReader(isr);
			String data=null;
			while((data=br.readLine())!=null) {
				System.out.println("客户端:"+data);
			}
			socket.shutdownInput();
			
		    //4.关闭资源
			br.close();
			isr.close();
			is.close();
			pw.close();
			os.close();
			socket.close();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
 
	}

}


客户端2:传输文件

package com.sheng.tetst1;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.Socket;

//客户端发送文件
public class ClientFile {
	public static void main(String[] args) throws Exception {
		Socket socket=new Socket("127.0.0.1",8888);
		try {
			File file=new File("C:\\Users\\lenovo\\Desktop\\Demo3\\666.txt");
			System.out.println("传输的文件大小为:"+file.length()+"kb");
			DataInputStream dis=new DataInputStream(new FileInputStream(file));
			DataOutputStream dos=new DataOutputStream(socket.getOutputStream());
			byte[] bys=new byte[1024];
			int len=0;
			while((len=dis.read(bys))!=-1) {
				dos.write(bys,0,len);
			}
			dos.flush();
			System.out.println("文件上传结束");
			dis.close();
			dos.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_43599377/article/details/102415198