我不知道我想要做什麼是可能的。 我想要一個套接字服務器運行,多個客戶端可以連接到它。客戶端A將文件拖放到他的GUI上,並且客戶端B得到一個彈出框詢問他是否想要接收該文件。如果同意的客戶端A開始上傳文件,並且客戶端B開始直接下載文件。這可能嗎?應該首先將文件傳輸到服務器?如果我將文件發送到它的工作原理服務器,但是當我嘗試將文件發送到客戶端BI得到如下:Java套接字服務器客戶端到客戶端文件傳輸
java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:241)
這裏是上傳類:
public Upload(String addr, int port, File filepath, OpenChatFrame frame) {
super();
try {
file = filepath;
ui = frame;
socket = new Socket(InetAddress.getByName(addr), port);
Out = socket.getOutputStream();
In = new FileInputStream(filepath);
length = file.length();
} catch (Exception ex) {
ex.printStackTrace();
}
}
@Override
public void run() {
try {
byte[] buffer = new byte[1024];
int count;
ui.jProgressBar1.setMaximum((int) length);
while ((count = In.read(buffer)) >= 0) {
Out.write(buffer, 0, count);
bytes += count;
ui.jProgressBar1.setValue(bytes);
}
Out.flush();
if (In != null) {
In.close();
}
if (Out != null) {
Out.close();
}
if (socket != null) {
socket.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
這裏是下載類:
public Download(String saveTo, OpenChatFrame ui) {
try {
server = new ServerSocket(0);
port = server.getLocalPort();
this.saveTo = saveTo;
this.ui = ui;
} catch (IOException ex) {
//TODO: catch
}
}
@Override
public void run() {
try {
socket = server.accept();
System.out.println("Download : " + socket.getRemoteSocketAddress());
In = socket.getInputStream();
Out = new FileOutputStream(saveTo);
byte[] buffer = new byte[1024];
int count;
while ((count = In.read(buffer)) >= 0) {
Out.write(buffer, 0, count);
}
Out.flush();
File physicalFile = new File(saveTo);
System.out.println("FILE FILENAME: " + physicalFile.getName());
System.out.println("saveTo: " + saveTo);
if (Out != null) {
Out.close();
}
if (In != null) {
In.close();
}
if (socket != null) {
socket.close();
}
} catch (Exception ex) {
//TODO: catch
}
}