Я создал TCP-сервер в Java и клиент TCP в Ruby. Проблема в том, что я не могу отправить более одного сообщения в одном и том же соединении, только первое сообщение отправляется, а другое не отправляется.
вот код Java
package com.roun512.tcpserver;
import java.io.*;
import java.net.*;
public class Program {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
String clientSentence;
String capitalizedSentence;
ServerSocket Socket = new ServerSocket(6789);
while(true)
{
Socket connection = Socket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connection.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connection.getOutputStream());
clientSentence = inFromClient.readLine();
System.out.println(clientSentence);
capitalizedSentence = clientSentence + '\n';
outToClient.writeBytes(capitalizedSentence);
System.out.println("Sent msg");
}
}
}
И вот код клиента
Client.rb
require 'socket'
class Client
def initialize()
server = TCPSocket.open("127.0.0.1", 6789)
if server.nil?
puts "error"
else
puts "connected"
end
server.puts("Hello\r\n")
sleep 2
server.puts("There\r\n")
server.close
end
end
Client.new()
Я получаю только Hello
. Я пробовал много других способов, но никто не работал.
Поэтому мой вопрос заключается в том, как отправить более одного сообщения в одном соединении, любая помощь будет оценена :)
Заранее спасибо!
Socket.accept()
ждет нового соединения после прочтения первой строки. Попробуйте следующее:
public static void main(String[] args) throws Exception {
String clientSentence;
String capitalizedSentence;
ServerSocket Socket = new ServerSocket(6789);
while (true)
{
Socket connection = Socket.accept();
while(true)
{
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connection.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connection.getOutputStream());
clientSentence = inFromClient.readLine();
System.out.println(clientSentence);
capitalizedSentence = clientSentence + '\n';
outToClient.writeBytes(capitalizedSentence);
System.out.println("Sent msg");
}
}
}
Если он работает, измените значение while (true)
на какое-либо значимое условие и не запустите его, чтобы закрыть соединение после завершения работы.