需求:客户端上传图片到服务端
思路:
- 客户端
1.建立socket服务端点
2.读取客户端已有的图片数据
3.通过socket输出流将数据发给服务端
4.读取服务端反馈信息
5.关闭 - 服务端
1.建立socket服务端点
2.接收客户端消息
3.将收到的数据写入到新的图片中
4.给客户端反馈
5.关闭
客户端代码:
class UploadPicClient
{
public static void main(String[] args) throws Exception
{
Socket s = new Socket("192.168.1.234",10086);//1.建立服务端点
FileInputStream fis = new FileInputStream("d:\\1.bmp");//读取客户端的图片
OutputStream os = s.getOutputStream();//通过socket输出流将数据发给服务端
byte[] bt =new byte[1024];//建立一个缓冲区
int len = 0;
while((len=fis.read(bt))!=-1)
{
os.write(bt, 0, len);//循环读取图片里面的数据写入缓冲区
}
s.shutdownOutput();//通知服务端数据已写完
InputStream is = s.getInputStream();//建立输入流读取服务端响应信息
byte[] btin = new byte[1024];
int length = is.read(btin);
System.out.println(new String(btin,0,length));
fis.close();
s.close();
}
}
服务端代码:
class UploadPicSever
{
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(10086);//监听端口
Socket s = ss.accept();//接收客户端消息
InputStream is = s.getInputStream();
FileOutputStream fos = new FileOutputStream("2.bmp");//保存为2.bmp
byte[] bt = new byte[1024];
int len = 0;
while ((len=is.read(bt))!=-1)
{
fos.write(bt,0,len);//循环写入缓冲区直到客户端终止传输
}
OutputStream os = s.getOutputStream();
os.write("上传图片成功".getBytes());
fos.close();
s.close();
ss.close();
}
}
运行后检查图片上传成功