Я реализую проект Java с использованием клиент-серверной архитектуры.Мой клиент заходит в бесконечный цикл при подключении через сокет.
EDIT1: я изменил свои клиентские и серверные программы на минимальные, полные и проверяемые коды.Проблема возникает из-за наличия нескольких потребителей в одном и том же входном и выходном потоках (как указано в ответе ниже).
Вот мой код сервера:
import java.net.*;
import java.io.*;
class Demo {
int a;
String b;
Demo() {
a = 10;
b = "Sample";
}
}
class Streamsample {
private ServerSocket serverSocket = null;
DataInputStream dis = null;
DataOutputStream dos = null;
ObjectInputStream ois = null;
ObjectOutputStream oos = null;
Streamsample() {
try{
serverSocket = new ServerSocket(3000);
Socket s = serverSocket.accept();
dis = new DataInputStream(s.getInputStream());
dos = new DataOutputStream(s.getOutputStream());
ois = new ObjectInputStream(s.getInputStream());
oos = new ObjectOutputStream(s.getOutputStream());
System.out.println(dis.readUTF());
Demo d = (Demo)ois.readObject();
System.out.print(d.a + " " + d.b);
dis.close();
dos.close();
ois.close();
oos.close();
}
catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Streamsample ss = new Streamsample();
}
}
Вот мой код клиента:
import java.net.*;
import java.io.*;
class Demo {
int a;
String b;
Demo() {
a = 10;
b = "Sample";
}
}
class Streamclient {
private Socket s = null;
DataInputStream dis = null;
DataOutputStream dos = null;
ObjectInputStream ois = null;
ObjectOutputStream oos = null;
Streamclient() {
try{
s = new Socket("localhost",3000);
dis = new DataInputStream(s.getInputStream());
dos = new DataOutputStream(s.getOutputStream());
ois = new ObjectInputStream(s.getInputStream());
oos = new ObjectOutputStream(s.getOutputStream());
dos.writeUTF("Hello");
Demo d = new Demo();
oos.writeObject(d);
dis.close();
dos.close();
ois.close();
oos.close();
}
catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Streamclient ss = new Streamclient();
}
}
Система, которую я внедряю, требует, чтобы мой клиент отправлял и получал objects
а также String
с, int
с и т. д. Я пытаюсь использовать DataInputStream
и DataOutputStream
для String
с, int
с и ObjectInputStream
, ObjectOutputStream
для object
с,Моя программа идет в бесконечный цикл.Так что я должен использовать ObjectStream's for passing
String s,
int s as well and completely omit
DataStream`s или есть обходной путь, который позволит использовать оба потока в одном сокете?