dan*_*dan 6 java client-server file-transfer
我正在尝试从服务器到客户端进行简单的文件传输.
它需要像这样:
客户端要求提供文件.
服务器将文件发送到客户端.
现在在代码中(下面)(这是我找到的唯一代码,很难找到)它只向我发送一个"好"的文本文件(甚至只能使它成为客户端中的一行).如果我尝试发送任何其他文件类型(如图像或rar文件),它会被损坏.
那么,有人可以帮我找一些可以发送和接收所有类型文件的工作代码(用Java),或者向我解释这段代码的问题是什么.
服务器端:
public class FileServer {
public static void main(String args[])throws IOException
{
ServerSocket ss=null;
try
{
ss=new ServerSocket(8081);
}
catch(IOException e)
{
System.out.println("couldn't listen");
System.exit(0);
}
Socket cs=null;
try
{
cs=ss.accept();
System.out.println("Connection established"+cs);
}
catch(Exception e)
{
System.out.println("Accept failed");
System.exit(1);
}
PrintWriter put=new PrintWriter(cs.getOutputStream(),true);
BufferedReader st=new BufferedReader(new InputStreamReader(cs.getInputStream()));
String s=st.readLine();
System.out.println("The requested file is : "+s);
File f=new File(s);
if(f.exists())
{
BufferedReader d=new BufferedReader(new FileReader(s));
String line;
while((line=d.readLine())!=null)
{
put.write(line);
put.flush();
}
d.close();
System.out.println("File transfered");
cs.close();
ss.close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
客户端:
class MyClient {
public static void main(String srgs[])throws IOException
{
Socket s=null;
BufferedReader get=null;
PrintWriter put=null;
try
{
s=new Socket("127.0.0.1",8081);
get=new BufferedReader(new InputStreamReader(s.getInputStream()));
put=new PrintWriter(s.getOutputStream(),true);
}
catch(Exception e)
{
System.exit(0);
}
String u,f;
System.out.println("Enter the file name to transfer from server:");
DataInputStream dis=new DataInputStream(System.in);
f=dis.readLine();
put.println(f);
File f1=new File("c:\\output");
FileOutputStream fs=new FileOutputStream(f1);
while((u=get.readLine())!=null)
{
byte jj[]=u.getBytes();
fs.write(jj);
}
fs.close();
System.out.println("File received");
s.close();
}
}
Run Code Online (Sandbox Code Playgroud)
yesssssssssssssssssssssssssssssssssssssssssssssssssssssss最后...
这是变化
客户端.
class MyClient {public static void main(String srgs[])throws IOException
{
Socket s=null;
BufferedReader get=null;
PrintWriter put=null;
try
{
s=new Socket("127.0.0.1",8081);
get=new BufferedReader(new InputStreamReader(s.getInputStream()));
put=new PrintWriter(s.getOutputStream(),true);
}
catch(Exception e)
{
System.exit(0);
}
InputStreamReader get2=new InputStreamReader(s.getInputStream());
String u,f;
System.out.println("Enter the file name to transfer from server:");
DataInputStream dis=new DataInputStream(System.in);
f=dis.readLine();
put.println(f);
File f1=new File("c:\\output");
FileOutputStream fs=new FileOutputStream(f1);
BufferedInputStream d=new BufferedInputStream(s.getInputStream());
BufferedOutputStream outStream = new BufferedOutputStream(new FileOutputStream(f1));
byte buffer[] = new byte[1024];
int read;
while((read = d.read(buffer))!=-1)
{
outStream.write(buffer, 0, read);
outStream.flush();
}
//while((u=get.readLine())!=null)
// {
// byte jj[]=u.getBytes();
// fs.write(jj);
//}
fs.close();
System.out.println("File received");
s.close();
}
}
Run Code Online (Sandbox Code Playgroud)
服务器端.
public class FileServer {
public static void main(String args[])throws IOException
{
ServerSocket ss=null;
try
{
ss=new ServerSocket(8081);
}
catch(IOException e)
{
System.out.println("couldn't listen");
System.exit(0);
}
Socket cs=null;
try
{
cs=ss.accept();
System.out.println("Connection established"+cs);
}
catch(Exception e)
{
System.out.println("Accept failed");
System.exit(1);
}
PrintWriter put=new PrintWriter(cs.getOutputStream(),true);
BufferedReader st=new BufferedReader(new InputStreamReader(cs.getInputStream()));
String s=st.readLine();
System.out.println("The requested file is : "+s);
File f=new File(s);
if(f.exists())
{
BufferedInputStream d=new BufferedInputStream(new FileInputStream(s));
BufferedOutputStream outStream = new BufferedOutputStream(cs.getOutputStream());
byte buffer[] = new byte[1024];
int read;
while((read = d.read(buffer))!=-1)
{
outStream.write(buffer, 0, read);
outStream.flush();
}
d.close();
System.out.println("File transfered");
cs.close();
ss.close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
非常感谢大家......
在这种情况下你不应该使用阅读器。当您读取/写入字符数据(文本)而不是二进制数据时,阅读器应该进行处理。使用某种输入流
http://download.oracle.com/javase/tutorial/i18n/text/stream.html
更新: 在 f.exist() 之后的服务器部分:
BufferedInputStream d=new BufferedInputStream(new FileInputStream(s));
BufferedOutputStream outStream = new BufferedOutputStream(cs.getOutputStream());
byte buffer[] = new byte[1024];
int read;
while((read = d.read(buffer))!=-1)
{
outStream.write(buffer, 0, read);
outStream.flush();
}
d.close();
System.out.println("File transfered");
cs.close();
ss.close();
Run Code Online (Sandbox Code Playgroud)