本文演示,使用Socket进行网络图片传送,实现客户端的client.bmp文件上传到服务端。
1)客户端,上传client.bmp图片给服务端,并接受服务端返回的“上传成功”消息。
2)服务端,接受客户端的图片并保存为server.bmp,同时给客户端发送“上传成功”消息。
客户端,代码如下:
-
package upload.photo.client; -
import java.io.FileInputStream; -
import java.io.InputStream; -
import java.io.OutputStream; -
import java.net.Socket; -
//客户端:上传图片 -
public class CUploadPhotoClient { -
public static void main(String[] args) throws Exception{ -
//1.连接诶服务器 -
Socket s = new Socket("127.0.0.1",5612); -
System.out.println("已连接到服务器5612端口,准备传送图片..."); -
//获取图片字节流 -
FileInputStream fis = new FileInputStream("client.bmp"); -
//获取输出流 -
OutputStream out = s.getOutputStream(); -
byte[] buf = new byte[1024]; -
int len = 0; -
//2.往输出流里面投放数据 -
while ((len = fis.read(buf)) != -1) -
{ -
out.write(buf,0,len); -
} -
//通知服务端,数据发送完毕 -
s.shutdownOutput(); -
//3.获取输出流,接受服务器传送过来的消息“上传成功” -
InputStream in = s.getInputStream(); -
byte[] bufIn = new byte[1024]; -
int num = in.read(bufIn); -
System.out.println(new String(bufIn,0,num)); -
//关闭资源 -
fis.close(); -
out.close(); -
in.close(); -
s.close(); -
} -
}
服务端,代码如下:
-
package upload.photo.server; -
import java.io.FileOutputStream; -
import java.io.InputStream; -
import java.io.OutputStream; -
import java.net.ServerSocket; -
import java.net.Socket; -
public class CUploadPhotoServer { -
public static void main(String[] args) throws Exception{ -
//1.服务器开始监听5612端口 -
ServerSocket ss = new ServerSocket(5612); -
System.out.println("服务端已启动,正在监听5612端口..."); -
//等待客户端 -
Socket s = ss.accept(); -
System.out.println("检测到客户端,准备数据接收..."); -
//客户端已连接,获取输入流 -
InputStream in = s.getInputStream(); -
//创建图片字节流 -
FileOutputStream fos = new FileOutputStream("server.bmp"); -
byte[] buf = new byte[1024]; -
int len = 0; -
//往字节流里写图片数据 -
while ((len = in.read(buf)) != -1) -
{ -
fos.write(buf,0,len); -
} -
//获取输出流,准备给客户端发送消息 -
OutputStream out = s.getOutputStream(); -
out.write("上传成功".getBytes()); -
//关闭资源 -
fos.close(); -
in.close(); -
out.close(); -
s.close(); -
ss.close(); -
} -
}
有不明白的地方,可以阅读《Java TCP使用Socket进行网络文件传送(5)》一文。
运行效果显示:
1)启动服务端
2)启动客户端
3)服务端显示结果
4)客户端图片储存位置
5)服务端储存图片位置