客户端
public class client {
public static void main(String[] args) {
try {
//创建一个客户端的发送对象,指定一个端口号
Socket socket=new Socket("127.0.0.1",10000);
//读取本地文件的数据
//将本地文件读到输入流中
//bis是输入流,将本地文件读入流中,bos是输出流,将文件内容按字节形式传输到服务器端
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("src\\filesocket\\c.jpg"));
BufferedOutputStream bos=new BufferedOutputStream(socket.getOutputStream());
byte[] bytes=new byte[1024];
int len;
//每次最多传1024kb
while((len= bis.read(bytes))!=-1){
//传到服务器端
bos.write(bytes,0,len);
}
//强制将缓冲区的数据立刻写入到输入流中,可避免传输不完整
bos.flush();
//关闭输出流
socket.shutdownOutput();
//接受服务器的回写数据(feedback signal)
//给输入流包括一个缓冲流
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//读取一整行
String line=br.readLine();
System.out.println(line);
bis.close();
bos.close();
br.close();
socket.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
服务器端
public class server {
public static void main(String[] args) {
try {
//创建客户端通道
ServerSocket ss=new ServerSocket(10000);
//等待响应,会返回一个Socket对象
Socket socket=ss.accept();
//输入流读取数据
BufferedInputStream bis=new BufferedInputStream(socket.getInputStream());
//输出流写到文件里
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("src\\filesocket\\d.png"));
//相同操作
int len;
byte[] bytes=new byte[1024];
while((len=bis.read(bytes))!=-1){
bos.write(bytes,0,len);
}
//返回消息
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw.write("上传成功");
//添加一个换行符
bw.newLine();
bw.flush();
bis.close();
bos.close();
socket.close();
ss.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}