注意:先启动服务器端,再启动客户端
客户端:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class UploadImgClient {
public static void main(String[] args) throws IOException {
System.out.println("客户端上传数据!");
//连接服务器利用Socket创建输出流
Socket s=new Socket("192.168.51.179",10001);
OutputStream os = s.getOutputStream();
BufferedOutputStream bos=new BufferedOutputStream(os);
//创建输入流读取文件
FileInputStream fis=new FileInputStream(new File("C:\\Users\\刘备\\Desktop\\a.png"));
BufferedInputStream bis=new BufferedInputStream(fis);
//一边读取一边写到服务器
byte [] by=new byte[1024];
int len=0;
while((len=bis.read(by))!=-1) {
bos.write(by,0,len);
}
//关闭Socket输出流
bos.flush(); //不刷新可能上传到服务器的图片会变小
//该方法可以代替关流,并且与该流相关的os/dos都不用关。s.shutdownInput();没这功能
s.shutdownOutput();
//创建Socket输入流接收服务器反馈
InputStream is = s.getInputStream();
DataInputStream dis=new DataInputStream(is);
System.out.println(dis.readUTF());
//关流
is.close();
dis.close();
bis.close();
fis.close();
s.close();
}
}
服务器端:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class UploadImgServer {
public static void main(String[] args) throws IOException {
System.out.println("服务器接收数据!");
//连接客户端利用Socket创建输入流
ServerSocket ss=new ServerSocket(10001);
Socket s = ss.accept();
InputStream is = s.getInputStream();
BufferedInputStream dis=new BufferedInputStream(is);
//创建输出流读取Scoket输入
FileOutputStream fos=new FileOutputStream(new File("C:\\Users\\刘备\\Desktop\\b.png"));
BufferedOutputStream bos=new BufferedOutputStream(fos);
//Socket输入流一边读取,输出流一边写入文件
byte [] by=new byte[1024];
int len=0;
while((len=dis.read(by))!=-1) {
bos.write(by,0,len);
}
//关闭Socket输入流
s.shutdownInput();
//创建Socket输出流给予客户反馈
OutputStream os = s.getOutputStream();
DataOutputStream dos=new DataOutputStream(os);
dos.writeUTF("服务器接收完毕!");
//关流
//该方法可以代替关流,并且与该流相关的os/dos都不用关。s.shutdownInput();没这功能
s.shutdownOutput();
bos.close();
fos.close();
s.close();
ss.close();
}
}