クライアントを初めて目:
public class uploadpicThreadClient {
public static void main(String[] args) throws IOException {
//1、创建客户端socket
Socket socket = new Socket("127.0.0.1", 8080);
//2、读取客户端要上传的图片
FileInputStream fis = new FileInputStream("E:\\5.JPG");
//3、获取socket输出流,将读到的图片数据发给服务端
OutputStream outputStream = socket.getOutputStream();
byte[] buf = new byte[1024];
int len = 0;
//使用输出流写出图片数据
while ((len = fis.read(buf)) != -1) {
outputStream.write(buf, 0, len);
}
// 告诉服务端,客户端数据已发送完毕,服务端停止读取
socket.shutdownOutput();
//读取服务端返回的数据
InputStream inputStream = socket.getInputStream();
//缓冲区存放数据提高读写速度
byte[] bufIn = new byte[1024];
int lenIn = inputStream.read(buf);
String text = new String(buf, 0, lenIn);
System.out.println(text);
//关闭资源
fis.close();
socket.close();
}
}
サーバー:
需要を受け入れるために、需要のアップロードの写真がある場合、サーバーは、スタンバイ状態にされている必要があります。
public class uploadpicThreadServer {
public static void main(String[] args) throws IOException {
//创建TCP的socket服务端
ServerSocket ss =new ServerSocket(8080);
while (true){
//获取客户端
//阻塞式方法,有任务时就开启,否则一直处于等待状态
Socket socket = ss.accept();
new Thread(new UploadTask(socket)).start();
}
}
}
スレッド・タスク:
必要性は実行スレッドのrun()メソッドを置くようにようにから送信されたIP接続処理の画像データを取得するためには、これらは、各スレッドのニーズを実行するためのタスクです。
public class UploadTask implements Runnable {
//规定上传文件的最大大小
private static final int SIZE = 1024*1024*2;
private Socket socket;
public UploadTask(Socket socket) {
this.socket=socket;
}
@Override
public void run() {
int count=0;
String ip = socket.getInetAddress().getHostAddress();
System.out.println(ip+".........connected");
try {
//读取客户端发来的数据
InputStream inputStream = socket.getInputStream();
//将读取到的文件存储到一个文件中
File dir =new File("E:\\image");
if (!dir.exists()){
dir.mkdirs();
}
File file =new File(dir,ip+".jpg");
//如果文件已经存在服务端,就文件名IP在原来的基础上+1
while (file.exists()){
file = new File(dir,ip+"("+(++count)+").jpg");
}
FileOutputStream fos =new FileOutputStream(file);
byte[] buf=new byte[1024];
int len=0;
while ((len=inputStream.read(buf))!=-1){
fos.write(buf,0,len);
if (file.length()>SIZE){
System.out.println(ip+"文件体积过大");
fos.close();
socket.close();
System.out.println(ip+"....."+file.delete());
return;
}
}
//获取socket输出流,将上传成功字样发给服务端
OutputStream outputStream = socket.getOutputStream();
outputStream.write("上传成功".getBytes());
fos.close();
socket.close();
}catch (IOException e){
}
}
}
テスト
まず、uploadpicThreadServeは、サーバー起動
クライアントuploadpicThreadClientを再起動します