Я разработал многопоточный сервер, который работает хорошо! , но теперь я хочу, чтобы он отправил в первый раз, когда клиент соединяет строку, а затем продолжит с тем же регулярным процессом, получая строку и отправляя файл! вот мой код для сервераЯ хочу отправить строку с многопоточного сервера только при подключении клиента
import java.io.*;
import java.net.*;
import java.nio.ByteBuffer;
import java.util.Scanner;
class TCPServer {
public static void main(String argv[]) throws Exception {
System.out.println("Welcome to the stream Server");
System.out.println("listening to Clients");
ServerSocket welcomeSocket = new ServerSocket(3248);
while (true) {
Socket connectionSocket = welcomeSocket.accept();
if (connectionSocket != null) {
Client client = new Client(connectionSocket);
client.start();
}
}
}
}
class Client extends Thread {
private Socket connectionSocket;
public Client(Socket c) throws IOException {
connectionSocket = c;
}
public void run() {
String path = "C:/pao/new2/";
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
try {
String fileToSendStr = readFile();
File fileToSend = null;
for (File f : listOfFiles)
{
if (f.getName().equals(fileToSendStr)) {
fileToSend = f;
break;
}
}
System.out.println("Connecting to Client to recieve the part " +fileToSendStr);
if (fileToSend == null) {
}
System.out.println("Sending the chunk to Client");
long length = fileToSend.length();
byte [] longBytes = new byte[8];
ByteBuffer bbuffer = ByteBuffer.wrap(longBytes);
bbuffer.putLong(length);
connectionSocket.getOutputStream().write(longBytes);
BufferedOutputStream bout = new BufferedOutputStream(connectionSocket.getOutputStream());
BufferedInputStream bain = new BufferedInputStream(new FileInputStream(fileToSend));
byte buffer [] = new byte [1024];
int i = 0;
while((i = bain.read(buffer, 0, 1024)) >= 0){
bout.write(buffer, 0, i);
}
System.out.println("chunk sended");
bout.close();
bain.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private String readFile() throws IOException {
BufferedReader r = new BufferedReader(new InputStreamReader(
connectionSocket.getInputStream()));
return r.readLine();
}
}
часть клиента, который хочет сделать соединение отличается от той части, что делает это соединение. только хочу получить строку в первый раз, а затем эта часть больше не доступна!
, набрав тайм-аут, чтобы welcomeSocket, что я заработаю! выйти за пределы петли? но тогда мне нужно будет снова запустить сервер! – Cbour
Да, это вызовет исключение. Вам нужно поймать его. Помимо этого, вы должны действительно отделить поток, который вы принимаете, от клиентов потока, созданного клиентами. –