基于tcp/ip协议的并发传输文件
2020-02-02 本文已影响0人
LX_代码制造坊
服务器端
服务器端开启基于tcp的网络传输通道,通过线程启动,解决多个客户端同时像服务器传输文件的并发问题。
代码例子如下:
public class TcpFileServer {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8888);
while(true){
new Thread(new Runnable() {
@Override
public void run() {
try {
Socket accept = serverSocket.accept();
InputStream inputStream = accept.getInputStream();
File file = new File("E:\\");
if (!file.exists()){
file.mkdir();
}
FileOutputStream fileOutputStream = new FileOutputStream(file+"copy_test.txt");
int len = 0;
byte bts[] = new byte[1024];
while((len=inputStream.read(bts))!=-1){
fileOutputStream.write(bts,0,len);
}
accept.getOutputStream().write("上传成功!!!".getBytes());
fileOutputStream.close();
accept.close();
}catch (Exception e){
System.out.println(e.toString());
}
}
}).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端
客户端负责通过tcp协议于服务器连通,并且向服务器传输数据。
代码例子如下:
public class TcpFileClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1",8888);
OutputStream outputStream = socket.getOutputStream();
FileInputStream fileInputStream = new FileInputStream("E:\\test.txt");
int len = 0;
byte bs[] = new byte[1024];
while ((len = fileInputStream.read(bs))!=-1){
outputStream.write(bs);
}
socket.shutdownOutput();
InputStream inputStream = socket.getInputStream();
while ((len = inputStream.read(bs))!=-1){
System.out.println(new String(bs,0,len));
}
fileInputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}