İki sayı girdiğiniz bir uygulamayı yapmaya çalışıyorum, numaralar ayrıştırılıyor ve TCP protokolü üzerinden sunucuya gönderiliyor, ardından ekleniyor, geri dönüyor ve ayarlanıyor bir TextField. Sorun, BufferedReader akışlarının aksine run() yönteminin girilecek sayıları beklememesidir. Şu anda DataInputStream ve DataOutPutStream ile çalışıyorum.run() yöntemi veri girişi için beklemiyor
İşte aşağıdaki kod!
public class Server implements Runnable {
public Server(){
}
@Override
public void run() {
while (true) {
try (ServerSocket serverSocket = new ServerSocket(1000);
Socket sSocket = serverSocket.accept();
DataInputStream in = new DataInputStream(sSocket.getInputStream());
DataOutputStream out = new DataOutputStream(sSocket.getOutputStream()))
{
System.out.println("Client connected.");
Integer s1 = in.read();
Integer s2 = in.read();
Integer result = s1 + s2;
out.write(result);
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
}
}
Ve Müşteri sınıfı:
bs.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ke) {
n1 = Integer.parseInt(tf1.getText());
n2 = Integer.parseInt(tf2.getText());
tf1.setText(String.valueOf(n1));
tf2.setText(String.valueOf(n2));
}
});
}
@Override
public void run() {
try(Socket clientSocket = new Socket("localhost", 1000);
DataInputStream in = new DataInputStream(clientSocket.getInputStream());
DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream()))
{
out.write(n1);
out.write(n2);
Integer rezultat = in.read();
tf3.setText(String.valueOf(result));
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
}
Ve ana sınıfı ve Konular aracılığıyla hem başlıyorum. Önceden teşekkürler! : D
Hangi 'run()' yöntemi - birini Müşteri? Eğer öyleyse, nasıl ve ne zaman başlıyorsunuz? – Kenney
Tamsayılar, projeyi çalıştırdığımda varsayılan değer olarak 0'a atanır çünkü Sunucu sınıfındaki run() yöntemi değerleri girmemi ve düğmeyi beklememi beklemiyor ... Her iki sınıfı da başlatıyorum Ana sınıftaki Konular üzerinden. –
Sorun, muhtemelen göndermediğiniz koddadır. Buradaki fikir şudur: Sunucu bir ServerSocket açar - sadece bir kez, bir döngüde değil - ve bağlantıları kabul eder - bir döngü içinde. Sunucu tarafında "İstemci bağlandı" mesajını görürseniz, istemciniz bağlandı, yani istemcide "run" yöntemi çalıştırıldı. Anlayışım, istemcinizin 2 metin alanının yanında bir düğmesinin bulunmasıdır ve siz bastığınızda, eki gerçekleştirmek için sunucuyla iletişim kurmanız gerektiğini düşünüyorsunuz? Bu durumda, istemci iş parçacığını "ana" olarak başlatmak istemezsiniz, ancak düğme basma olay işleyicisinde istemezsiniz. – Kenney