基于Tcp上传文件

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

public class PicLoadTestCZ{}

/*
	实现多用户的图片上传。。

*/

class Client{
	public static void main(String []args)throws Exception{
		
		while(args.length>1){
			System.out.println("输入的有误。。");
			return ;
		}
		String filename=args[0];

		File file=new File(filename);

		while(!file.exists()){
			System.out.println("文件不存在。。");
			return ;
		}
		while(file.length()>(1024*1024*3)){
			System.out.println("文件太大。。");
			return;
		}
		while(!file.getName().endsWith(".gif")){
			System.out.println("文件格式不对,。。。");
			return;
		}
		Socket s=new Socket("127.0.0.1",10009);

		OutputStream out=s.getOutputStream();
		FileInputStream filein=new FileInputStream(file);//将文件与流关联

		byte buf[]=new byte[1024];
		int len=0;
		while((len=filein.read(buf))!=-1){
		
			out.write(buf,0,len);
			//System.out.println("传一个字节");
		}
		s.shutdownOutput();

		InputStream in=s.getInputStream();
		byte []buts=new byte[1024];
		int len1=0;
		len=in.read(buf);
		String str=new String(buf,0,len);
		System.out.println(str);
		
		filein.close();
	}

}

class PicLoad implements Runnable{
	
	private Socket s;
	public PicLoad(Socket s){
		this.s=s;
	}

	public void run(){
		try{
			InputStream in=s.getInputStream();

			FileOutputStream fileout=null;
				
			String ip=s.getInetAddress().getHostAddress();
			
			File file=new File("e:\\"+ip+".bmp");
			int count=1;
			while(file.exists())
					file=new File("e:\\"+ip+"("+(count++)+").bmp");
	
			
				fileout=new FileOutputStream(file);
			byte buf[]=new byte[1024];

			int len=0;

			
			while((len=in.read(buf))!=-1){
				
				fileout.write(buf,0,len);
			}
			OutputStream out=s.getOutputStream();
			out.write("上传成功。。。".getBytes());
			out.close();
			fileout.close();
		}catch(Exception e){
			e.toString();
		}
		
	}

}
class Server{
	public static void main(String []args)throws Exception{
		ServerSocket ss=new ServerSocket(10009);
	while(true){
		Socket s=ss.accept();
		new Thread(new PicLoad(s)).start();
	}

	}
}


文件上传的原理也是如此。。。从客户端上传到服务器。。。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您解答这个问题。 首先,我们需要建立一个TCP连接来进行文件传输。客户端通过TCP连接连接到服务器,然后将文件数据传输到服务器。以下是一个简单的TCP文件上传过程: 1. 客户端连接服务器,建立TCP连接。 2. 客户端打开要上传的文件,并读取文件数据。 3. 客户端将文件数据分成固定大小的块,每次发送一个块到服务器。 4. 服务器接收到每个块并将其写入文件。 5. 重复步骤3和4,直到所有数据块都被传输并写入服务器上的文件。 6. 客户端关闭文件和TCP连接。 下面一个基于Python的简单实现: 服务端代码: ```python import socket HOST = '127.0.0.1' # 服务器IP地址 PORT = 65432 # 服务器端口号 BUFFER_SIZE = 1024 # 缓冲区大小 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((HOST, PORT)) s.listen() conn, addr = s.accept() with conn: print('Connected by', addr) with open('uploaded_file', 'wb') as f: while True: data = conn.recv(BUFFER_SIZE) if not data: break f.write(data) ``` 客户端代码: ```python import socket HOST = '127.0.0.1' # 服务器IP地址 PORT = 65432 # 服务器端口号 BUFFER_SIZE = 1024 # 缓冲区大小 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((HOST, PORT)) with open('file_to_upload', 'rb') as f: while True: data = f.read(BUFFER_SIZE) if not data: break s.sendall(data) ``` 在上面的代码中,服务端监听连接并接受客户端传输的数据,并将其写入一个名为“uploaded_file”的文件中。客户端打开要上传的文件并将其分块发送到服务器。 当然,这仅仅是一个简单的实现,实际情况可能涉及到更多的安全性,鲁棒性等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值