我正在尝试从服务器到客户端进行简单的文件传输.
它需要像这样:
客户端要求提供文件.
服务器将文件发送到客户端.
现在在代码中(下面)(这是我找到的唯一代码,很难找到)它只向我发送一个"好"的文本文件(甚至只能使它成为客户端中的一行).如果我尝试发送任何其他文件类型(如图像或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 …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我ServerSocket使用一些端口创建一个实例 我完成后,我关闭套接字,但当我尝试ServerSocket在同一个端口上创建一个新的,它会抛出:
"java.net.BindException: Address already in use"
Run Code Online (Sandbox Code Playgroud)
如果我ServerSocket使用不同的端口创建,那么它的工作原理.
ServerSocket.isClosed 也返回true
问题是什么?
public void run() {
try {
BufferedInputStream bufferedinputstream = new BufferedInputStream(
new FileInputStream(fileReq));
BufferedOutputStream outStream = new BufferedOutputStream(
cs.getOutputStream());
byte buffer[] = new byte[1024];
int read;
System.out.println(cs);
while ((read = bufferedinputstream.read(buffer)) != -1)
{
outStream.write(buffer, 0, read);
outStream.flush();
}
System.out.println("File transfered");
outStream.close();
bufferedinputstream.close();
try {
this.finalize();
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (Exception e) { …Run Code Online (Sandbox Code Playgroud)