TCP复制文件
客户端:
package cn.wangyu.net;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
/**
* @author JiangMinyan
*
* @version 2016/02/22 11:20:43
*/
public class TextClient {
public static void main(String[] args) throws Exception{
Socket client = new Socket("192.168.21.158", 10005);
BufferedReader bufr = new BufferedReader(new FileReader("Chat.java"));
PrintWriter writer = new PrintWriter(client.getOutputStream(), true);
//利用时间戳进行标记的方法,是客户端断开。
// DataOutputStream dos = new DataOutputStream(client.getOutputStream());
// long time = System.currentTimeMillis();
// dos.writeLong(time);
String line = null;
while((line = bufr.readLine()) != null){
writer.println(line);
}
// writer.println(time);
//jdk 提供的socket的方法
client.shutdownOutput();//关闭客户端输出流,相当于给流中加入结束标记.
BufferedReader bufIn = new BufferedReader(new InputStreamReader(client.getInputStream()));
String str = bufIn.readLine();
System.out.println(str);
bufr.close();
client.close();
}
}
服务端:
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TextServer {
public static void main(String[] args) throws Exception{
ServerSocket server = new ServerSocket(10005);
Socket socket = server.accept();
System.out.println(socket.getInetAddress().getHostAddress() + "......connected");
BufferedReader bufIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(new FileWriter("server.txt"), true);
// DataInputStream dis = new DataInputStream(socket.getInputStream());
// long time = dis.readLong();
String line = null;
while((line = bufIn.readLine()) != null){
// if ((time+"").equals(line)) {
// break;
// }
out.println(line);
}
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
writer.println("上传成功");
out.close();
socket.close();
server.close();
}
}
并发图片上传
客户端:package cn.wangyu.net;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/**
* @author JiangMinyan
*
* @version 2016/02/22 13:54:35
*/
public class ImageClient {
public static void main(String[] args) throws Exception{
uploadImage("f://1.bmp");
}
public static void uploadImage(String path) throws Exception{
File file = new File(path);
if (!(file.exists() && file.isFile())) {
System.out.println("该文件有问题,要么不存在,要么不是文件");
return;
}
if (!file.getName().endsWith(".jpg")) {
System.out.println("图片格式错误,请重新选择");
return;
}
if (file.length() > 1024*1024*5) {
System.out.println("图片过大,请重新选择");
return;
}
Socket client = new Socket("192.168.21.158", 10006);
FileInputStream fis = new FileInputStream(file);
OutputStream out = client.getOutputStream();
byte[] buf = new byte[1024];
int len = 0;
while((len=fis.read(buf)) != -1){
out.write(buf, 0, len);
}
//告诉服务端数据已写完
client.shutdownOutput();
InputStream in = client.getInputStream();
byte[] bufIn = new byte[1024];
int num = in.read(bufIn);
System.out.println(new String(bufIn, 0, num));
fis.close();
client.close();
}
}
服务端:
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class ImageThread implements Runnable{
private Socket client;
public ImageThread(Socket client) {
this.client = client;
}
public void run() {
int count = 1;
try {
System.out.println(client.getInetAddress().getHostAddress() + ".....connected");
InputStream in = client.getInputStream();
File file = new File(client.getInetAddress().getHostAddress()+"("+ count +")"+".jpg");
while (file.exists()) {
file = new File(client.getInetAddress().getHostAddress()+"("+ (count++) +")"+".jpg");
}
FileOutputStream fos = new FileOutputStream(file);
byte[] buf = new byte[1024];
int len = 0;
while((len=in.read(buf)) != -1){
fos.write(buf, 0, len);
}
OutputStream out = client.getOutputStream();
out.write("上传成功".getBytes());
fos.close();
client.close();
} catch (Exception e) {
throw new RuntimeException("上传失败");
}
}
}
import java.net.ServerSocket;
import java.net.Socket;
public class ImageServer {
public static void main(String[] args)throws Exception {
ServerSocket server = new ServerSocket(10006);
while(true){
Socket client = server.accept();
new Thread(new ImageThread(client)).start();
}
}
}