客户端
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;//每次最多传1024kbwhile((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);}}
}