Я делаю приложение чата между несколькими клиентами в C #, которые подключаются к одному Java-серверу.
Поэтому я отправляю сообщение одному из пользователей на сервер, и сервер отправляет это сообщение всем остальнымподключенные пользователи.
У каждого клиента есть отдельная нить на сервере, и у меня есть нить;
public class ServerThread extends Thread {
private Server server;
private Socket sck;
InputStream receive;
OutputStream send;
public ServerThread(Server server, Socket s) {
this.server = server;
sck = s;
}
public void run() {
try {
handleClient();
} catch (IOException e) {
e.printStackTrace();
}
}
private void handleClient() throws IOException {
receive = sck.getInputStream();
send = sck.getOutputStream();
byte[] b = new byte[1024];
receive.read(b);
System.out.print(new String(b));
BufferedReader reader = new BufferedReader(new InputStreamReader(receive, "UTF-8"));
String line;
while((line = reader.readLine()) != null) {
if(line.equalsIgnoreCase("quit"))break;
List<ServerThread> clients = server.getClients();
for(ServerThread allClients : clients) {
allClients.send(line);
}
}
}
private void send(String message) {
try {
send.write(message.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
И моя проблема:
когда клиент отправляет что-то на сервер, я могу прочитать это;
byte[] b = new byte[1024];
receive.read(b);
System.out.print(new String(b));
Я получаю правильную строку, которую я отправил, но BufferedReader ничего не получает. Программа никогда не входит в цикл while, потому что
line = reader.readLine();
ничего не читает, поэтому я понятия не имею, что не так. Почему «InputStream # read (byte)» работает, а «BufferedReader # readLine ()» не работает ..?
Вот что я посылаю приложением C #;
byte[] text = System.Text.Encoding.UTF-8.GetBytes("test1212");
sck.Send(text);
Что-тоне так с этим сообщением? : v
РЕДАКТИРОВАТЬ: Даже с "\ r \ n" в конце сообщения, которое я отправляю, Буферизованный не читает его .. Как я должен добавить возврат каретки к сообщению?
Надеюсь, кто-нибудь найдет, что не так.
Спасибо за попытку помочь мне. (Извините, если я сделал ошибки, я француз: l)