1、客户端上传文本文件到服务端
//## 客户端 ##
public static void uploadClient throws IOException(){
//创建客户端Socket服务
Socket s = new Socket("192.168.50.110",10000);
//读取客户端的文本文件
BufferedReader bufr =
new BufferedReader(new InputStreamReader(s.getInputStream()));
//获取Socket输出流
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
/*强调一个知识点,PrintWriter(InputStream,true)和println、printf、format方法一起用时,则自动刷出缓冲区*/
//开始读写
String str = null;
while((str=bufr.readLine())!=null) {
out.println(str);
//如果PrintWriter没有声明true,则该行代码应改为
// out.print(str+"\r\n");//或者println(str);
// out.flush();
/*
1、因为客户端的in.readLine()方法是阻塞式的,而这边的数据又一直存在缓冲区没有刷出来,客户端那边就会一直处于阻塞状态。
2、print()写的时候缺少结束标记("\r\n"),所以要添加
*/
}
//告诉客户端写完了
s.shutdownOutput();
//获取服务端返回数据
BufferedReader bufIn =
new BufferedReader(new InputStreamReader(s.getInputStream()));
String str1 = bufIn.readLine();
System.out.println(str1);
//关闭客户端和读取流
bufr.close();
s.close();
}
//## 服务端 ##(与客户端差不多啦)
public static void uploadServer throws IOException(){
ServerSocket ss = new ServerSocket(10000);
Socket s = ss.accept();
BufferedWriter bufw =
new BufferedWriter(new FileWriter("D:\\server.txt"));
BufferedReader bufIn =
new BufferedReader(new InputStreamReader(s.getInputStream()));
String str = null;
while((str=bufIn.readLine())!=null) {
bufw.write(str);
bufw.newLine();
bufw.flush();
}
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
out.println("接收完毕!上传成功!");
ss.close();
s.close();
bufw.close();
}
//注意:这两个方法一定要是服务端先运行,再运行客户端,否则会报错
2、客户端上传音媒文件到服务端
//客户端
public static void uploadPicClient throws IOException{
final int SIZE = 1024;//SIZE的值不应该太大,会导致上传文件占用内存出错
Socket s = new Socket("192.168.50.110",10000);
FileInputStream fis = new FileInputStream("D:\\client.png");
OutputStream out = s.getOutputStream();
byte[] buf = new byte[SIZE];
int ch=0;
while((ch=fis.read(buf))!=-1) {
out.write(buf, 0, buf.length);
}
//告诉服务端结束了
s.shutdownOutput();//- -注意不是shutdownInput()
BufferedReader in =
new BufferedReader(new InputStreamReader(s.getInputStream()));
String text = in.readLine();
System.out.println(text);
s.close();
fis.close();
}
//服务端
public static void uploadPicClient throws IOException{
ServerSocket ss = new ServerSocket(10000);
Socket s = ss.accept();
FileOutputStream fos = new FileOutputStream("D:\\server.png");
InputStream in = s.getInputStream();
byte[] buf = new byte[SIZE];
int ch=0;
while((ch=in.read(buf))!=-1) {
fos.write(buf, 0, buf.length);
}
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
out.println("上传成功!");
ss.close();
s.close();
fos.close();
}