Java:地址已被使用

标签 java multithreading sockets networking

我正在尝试创建一个简单的类,可以通过网络发送文件。基本上,这个类在每台机器上创建一次,启动一个单独的监听线程,并且它可以发送和接收文件。此时,我已经对其他地址(到环回)和文件位置进行了硬编码,以简化测试。

这是我的类(class):

public class ConnectionHandler  extends Thread{

    private ServerSocket sSocket;
    private Socket socket;

    public ConnectionHandler(){
        try {
            this.sSocket = new ServerSocket(6533);
            this.socket = new Socket("127.0.0.1", 6533);

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e){
            e.printStackTrace();
        }
    }

    public void sendFile(File f) {
        try {
            int count;
            byte[] buffer = new byte[1024];

            BufferedInputStream in = new BufferedInputStream(new FileInputStream(f));
            OutputStream out = socket.getOutputStream();

            while ((count = in.read(buffer)) > 0)
            {
              out.write(buffer, 0, count);
            }

            out.flush();
            out.close();
            in.close();
            socket.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Override
    public void run(){

        try {
            int count;
            byte[] buffer = new byte[1024];

            InputStream in = sSocket.accept().getInputStream();
            BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(location));

            while ((count = in.read(buffer)) > 0)
            {
              out.write(buffer, 0, count);
              out.flush();
            }

            out.close();
            in.close();
            sSocket.close();

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

但是,我遇到了“地址已在使用”错误,并且无法找出代码中的问题。此外,我认识到我的“运行”线程在一次传输后终止,这是有意用于测试的。我计划实现一个更强大的线程,可以处理多个连接等。

最佳答案

还有其他东西正在监听端口 6533。netstat 会告诉您什么。

关于Java:地址已被使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20647247/

相关文章:

java - 向实体添加新字段

java - 使用 Lucene 过滤带有数字的单词并检索 2-gram 和 1-gram

java - Drools:如何设置多线程(multithreadEvaluation)7.34.0 -Java Maven Spring

c - 如何使用 pthread 在线程之间同步,其中一个是计时器?

java - 移动 Java Applet?

java - 类似谷歌的动态搜索

node.js - socket.get() 和 socket.set() 出现问题

c++ - 从 Qt 中的套接字中读取所有数据

c++ - 我应该实现自己的 TCP/IP 套接字超时吗?

java - 使用 selenium,我需要动态迭代所有 iframe 及其子 iframe