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