小编dan*_*dan的帖子

简单的Java文件传输程序问题

我正在尝试从服务器到客户端进行简单的文件传输.

它需要像这样:

客户端要求提供文件.

服务器将文件发送到客户端.

现在在代码中(下面)(这是我找到的唯一代码,很难找到)它只向我发送一个"好"的文本文件(甚至只能使它成为客户端中的一行).如果我尝试发送任何其他文件类型(如图像或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)

java client-server file-transfer

6
推荐指数
1
解决办法
2万
查看次数

如何在使用服务器套接字后关闭端口

在我的应用程序中,我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)

java sockets serversocket

5
推荐指数
1
解决办法
2万
查看次数