服务器处理多个客户端消息,java - Java-套接字编程-如何使客户端从多个服务器接收消息? - 堆栈内存溢出...

我需要让多个客户端与多个服务器对话并处理它们的响应。

到目前为止,我已经能够编写绑定到多个客户端的服务器代码(为每个客户端生成一个线程),并且客户端连接到多个服务器。

我遇到问题的地方是客户端-我无法从服务器接收响应。

操作顺序如下-

假设我有2台服务器和1个客户端。 客户端连接到两台服务器,向它们发送消息,两台服务器都接收到该消息,并且都向客户端发送回复-我无法收到此回复。

服务器代码-

@Override

public void run() {

try {

// create a serversocket to listen to requests

ServerSocket serverSocket = new ServerSocket(port);

// create n sockets to listen to 5 client

for (int i = 0; i < n; i++) {

Socket socket = serverSocket.accept();

// create a processor thread for each to read and process the incoming Messages

Processor processor = new Processor(socket);

processor.start();

}

serverSocket.close();

} catch (IOException e) {

e.printStackTrace();

}

服务器代码处的处理器-

@Override

public void run() {

try {

ObjectInputStream in = new ObjectInputStream(socket.getInputStream());

OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream());

while (true) {

String str = in.readObject();

System.out.println(message);

out.write("Got your message " + message.toString());

}

} catch (IOException e) {

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (ClassCastException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

System.out.println("Processor completed " );

}

客户代码-

public static void main(String[] args) throws IOException, InterruptedException {

// make the connections with other nodes

connections = connect();

// connect() creates connections from the client to all servers and stores the socket and out objects in the object called Connections.Code omitted to avoid clutter

// process all the commands

while(!commands.isEmpty()){

for(int i=0 ; i<2; i++){

send(commands.poll() , i);

}

Thread.sleep(500);

}

}

// Sends Message m to the node i

public static synchronized void send(Message m, int i) {

try {

connections.outs[i].writeInt(m.nodeId);

connections.outs[i].writeInt(m.timestamp);

connections.outs[i].writeObject(m.type);

connections.outs[i].writeObject(m.value);

connections.outs[i].flush();

InputStreamReader isr = new InputStreamReader(connections.sockets[i].getInputStream());

final BufferedReader br = new BufferedReader(isr);

new Thread() {

public void run() {

try {

while (true) {

String message = br.readLine();

System.out.println("Message received from the server : " +message);

}

} catch(IOException e) {

e.printStackTrace();

}

}

}.start();

} catch (IOException e) {

e.printStackTrace();

}

}

我确定在收听消息时我做错了什么。 关于如何从多个服务器接收和处理消息的任何建议都将非常有帮助。

TIA

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值