您的位置:首页 > 理论基础 > 计算机网络

loading黑马程序员之网络编程:文件传输(3-2)

2014-01-06 16:29 232 查看
package com.heima.net;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class TcpUploadImgClient {

public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1", 10003);
new Thread(new ImgRead(socket)).start();
new Thread(new ImgWrite(socket)).start();

} catch (Exception e) {
e.printStackTrace();
}
}

}
class ImgRead implements Runnable {

private Socket socket;

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

@Override
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println("服务器" + socket.getInetAddress().getHostName()
+ "端口:" + socket.getPort() + "发来了报文:"+line);
}
} catch (IOException e) {
e.printStackTrace();
}
}

}

class ImgWrite implements Runnable {

private Socket socket;

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

@Override
public void run() {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream(new File("1.jpg")));
bos = new BufferedOutputStream(socket.getOutputStream());
byte[] buf = new byte[1024];
int len = 0;
while((len = bis.read(buf))!=-1){
bos.write(buf, 0, len);
bos.flush();
}
//定义标记,告诉服务器,文件已写完
socket.shutdownOutput();
//socket.close();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
bis.close();
} catch (Exception e) {
e.printStackTrace();
}
}

}

}


package com.heima.net;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpUploadImgServer {

public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(10004);
while(true){
Socket socket = ss.accept();
new Thread(new ImgServerRead(socket)).start();
}

} catch (Exception e) {
e.printStackTrace();
}
}
}

class ImgServerRead implements Runnable {

private Socket socket;

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

@Override
public void run() {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(socket.getInputStream());
String ip = socket.getInetAddress().getHostName();
int count = 0;
File file = new File(ip+".jpg");
//如果文件存在
while(file.exists()){
file = new File(ip+"("+(++count)+")"+".jpg");
}
bos = new BufferedOutputStream(new FileOutputStream(file));

PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
byte[] buf = new byte[1024];
int len = 0;
while ((len = bis.read(buf)) != -1) {
bos.write(buf, 0, len);
bos.flush();
}
out.println("文件复制完毕");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bos.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息