我的程序:服务端要接受客服端发来的文字,然后服务端在某个盘下面找改文字对应的文件(wav)文件,如果找到了就发信息给客服端文件名,如果没有找,就返回一个默认的文件名
异常:由服务端发送过去的文字到客服端却多处乱码
这里是客户端
public class Client {
public static void main(String[] args) throws IOException {
Socket socket=new Socket(InetAddress.getByName("192.168.238.97"),8888);
String destPath;
System.out.println("你的要接受的文件名:");
String str=new Scanner(System.in).next();
//创建一个输出流
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bufferedWriter.write(str);
bufferedWriter.newLine();
bufferedWriter.flush();
socket.shutdownOutput();
//接受服务端发来的信息操作,用于修改文件名字;
destPath=ReceiveMassage(socket);
System.out.println("path="+destPath);}
public static String ReceiveMassage(Socket socket) throws IOException {
//新建一个接受类
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String s=br.readLine();
return s;
}
}
这里是服务端
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket sockets=new ServerSocket(8888);
String pathString="D:\\";
String originPath="D:\\默认.wav";
System.out.println("服务端已建立,正在等待接收文件名");
Socket socket= sockets.accept();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//收取数据
String s=bufferedReader.readLine();
System.out.println("文件名为:"+s);
//看是否能知道目标文件,如果在则发信息是目标文件的名称,如果不是则就返回默认文件名称
File fileDest=FindFile(pathString,s);
SendMassage(fileDest,socket, s);
//向客户端回复信息,如果能找得到,那就恢复原文件名,如果找不到,那就恢复默认文件名
public static void SendMassage(File file,Socket socket,String s) throws IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String s1;
if(file!=null){
s1=s+".wav";
bw.write(s1);
}else{
s1="默认.wav";
bw.write(s1);
}
bw.flush();
}
//该方法是寻找是否有这个文件,如果有则返回该文件,如果没有,则返回空
public static File FindFile(String PathString,String s){
File file=new File(PathString);
File[] files=file.listFiles();
s=s+".wav";
System.out.println(s);
for(File fileItem:files){
String s1=fileItem.getName();
System.out.println(s1);
if(s1.equals(s)){
return fileItem;
}
}
return null;
}