tcp文件传输 java_基于TCP文件传输(Java)

//服务器端

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.FileOutputStream;

import java.net.ServerSocket;

import java.net.Socket;

//使用TCP协议写一个可以上传文件的服务器和客户端。

public class UpLoad {

public static void main(String[] args) throws Exception {

ServerSocket ss = new ServerSocket(3000);

Socket socket = ss.accept();

new Thread(new Receive(socket)) {

}.start();

}

}

class Receive implements Runnable {

private Socket socket;

public Receive(Socket socket) {

this.socket = socket;

}

public void run() {

try {

BufferedInputStream bis = new BufferedInputStream(socket

.getInputStream());

byte[] bFileName = new byte[255];

int len = bis.read(bFileName);

String fileName = new String(bFileName, 0, len).trim();

byte[] bytes = new byte[1024];

FileOutputStream fos = new FileOutputStream("d://" + fileName);

BufferedOutputStream bos = new BufferedOutputStream(fos);

len = 0;

while ((len = bis.read(bytes)) != -1) {

bos.write(bytes, 0, len);

}

bos.close();

fos.close();

bis.close();

socket.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

//客户端:

import java.io.BufferedOutputStream;

public class UpLoadClient {

public static void main(String[] args) throws Exception {

BufferedReader br = null;

String path = null;

String fileName = null;

String ip = null;

while (true) {

System.out.println("请输入文件路径:");

br = new BufferedReader(new InputStreamReader(System.in));

path = br.readLine();

File file = new File(path);

fileName = path.substring(path.lastIndexOf("//") + 1);

if (file.isDirectory() || !file.exists())

System.out.println("路径不正确!");

else

break;

}

System.out.println("请输入服务器地址:");

br = new BufferedReader(new InputStreamReader(System.in));

ip = br.readLine();

System.out.println("确认上传:" + path + "文件吗(y/n)?");

br = new BufferedReader(new InputStreamReader(System.in));

String result = br.readLine();

if ("n".equalsIgnoreCase(result)) {

br.close();

return;

}

Socket socket = new Socket(ip, 3000);

FileInputStream fs = new FileInputStream(path);

byte[] bytes = new byte[1024];

BufferedOutputStream bos = new BufferedOutputStream(socket

.getOutputStream());

while (true) {

if (fileName.getBytes().length < 255)

fileName += "/u0000";

else

break;

}

bos.write(fileName.getBytes());

bos.flush();

int len = 0;

while ((len = fs.read(bytes)) != -1) {

bos.write(bytes, 0, len);

}

bos.close();

fs.close();

br.close();

socket.close();

System.out.println("文件上传完毕!");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值