Мне нужна помощь Я пытаюсь сделать приложение клиентского сервера для копирования файлов в java ... У меня есть объект MainWnd, который создает объект TCPServer и кнопку отправки, он будет создайте объект TCPClient, который отправляет исходные данные противнику TCPServer и откроет заданное число Listen Thread (пусть оно будет n) (здесь Прослушать темы здесь только потому, что они принимают файл) (каждый поток прослушивается на другом порту, который отправляет обратно TCPClient) Затем TCPClient создает n другие потоки TCPClients, которые отправляют файл ... Это у меня есть, и он работает. Проблема в том, что прием файла может быть прерван приемником, когда он нажимает кнопку «Прерывание». Я не могу получить информацию об этом прерывании потоку TCPServer получателя, который должен убить этот поток n, который загружает файл.java введите другой поток при использовании цикла с сокетами
Я думаю, проблема в TCPServer, где есть бесконечный цикл, но Socket в этом вызовет блокировку цикла, поэтому я не могу войти в класс Connection и убить это n потоков.
TCP SERVER
public void setSendInterruption() {
this.interruptedSending = true;
//c.setSendInterruption();
}
public TCPServer(int port, int socketNums, Map<Byte, LinkedList<Byte>> realData, File file, int fileLength) {
this.serverPort = port;
this.socketNums = socketNums;
if(file != null)
this.file = file;
if(fileLength != -1)
this.fileLength = fileLength;
if(realData != null)
this.realData = realData;
if(tmpData != null)
this.tmpData = tmpData;
}
@Override
public void run() {
try {
System.out.println(this.getId());
listenSocket = new ServerSocket(serverPort);
System.out.println("server start listening... ... ...");
while(true) {
if(interruptedSending)
System.out.println("Here I never come");
Socket clientSocket = listenSocket.accept();
Connection c = new Connection(clientSocket, socketNums, realData, file, fileLength);
}
}
catch(IOException e) {
System.out.println("Listen :"+e.getMessage());}
}
Подключение
while (true)
{
byteRead = input.read();
//Thread.sleep(100);
if(interruptedSending) {
TCPClient tcpClient = new TCPClient(clientSocket.getPort(), clientSocket.getInetAddress().getHostAddress());
tcpClient.sendInterruptedData();
interruptedSending = false;
}
char lowChar;
if(byteRead == -1) {
break;
} else
lowChar = (char)byteRead;
lowData += lowChar;
if(lowData.length() >= 2) {
if (lowData.substring(lowData.length()-2).compareTo("//") == 0) {
break;
} else if (lowData.length() > 6) {
byteData.add((byte)byteRead);
}
}
}
В связи с этим есть несколько строк, но они только в основном разбор протокола. Спасибо за помощь. Надеюсь, я написал это чистым ...