具有多客户端通信的Java服务器。

具有多客户端通信的Java服务器。,java,multithreading,model-view-controller,client,Java,Multithreading,Model View Controller,Client,我正在为一项任务做一个游戏。我用Java设置了一个服务器和多客户端,我们使用的是MVC。我需要让一个客户端将他们的名字发送到服务器,然后当有两个玩家在场时,我需要将这两个名字连同他们的玩家号码(玩家1或玩家2)一起发送回客户端。我不知道如何分辨信息来自哪个线程,或者信息发送到哪个线程,所以不是所有玩家都认为自己是玩家一。谢谢 有两个线程,一个用于用户1,一个用于用户2。它们应该使用共享对象相互通信,并在事件发生时通知彼此。当第一个用户连接时生成线程1,当第二个用户连接时生成线程2。在这里,我将与

我正在为一项任务做一个游戏。我用Java设置了一个服务器和多客户端,我们使用的是MVC。我需要让一个客户端将他们的名字发送到服务器,然后当有两个玩家在场时,我需要将这两个名字连同他们的玩家号码(玩家1或玩家2)一起发送回客户端。我不知道如何分辨信息来自哪个线程,或者信息发送到哪个线程,所以不是所有玩家都认为自己是玩家一。谢谢

有两个线程,一个用于用户1,一个用于用户2。它们应该使用共享对象相互通信,并在事件发生时通知彼此。当第一个用户连接时生成线程1,当第二个用户连接时生成线程2。

在这里,我将与您共享一个不错的聊天程序,其中一台服务器根据您的要求使用TCP协议与多个客户端通信

该计划包括:

  • 无论新客户添加到何处,都会通知每个客户及其姓名和职位
  • 它还检查现有名称。程序不允许多个客户端使用相同的名称
将此程序用作游戏的初始启动程序。如果您想在程序中添加新功能,请告诉我

以下是代码(有关更多说明,请参见代码注释):

注意:在端口号1234运行此程序之前,请替换LiveChatClient.java文件中的主机名

运行程序的步骤:

  • 第一次只运行一次LiveChatServer
  • 然后为多个客户端运行LiveChatClient,您可以添加任意数量的客户端
Opcode.java:

用于设置客户端-服务器通信协议的操作代码

package com.chat;

/**************** an interface to define different operation code **************/

public interface Opcode {
    int CLIENT_CONNECTEING = 1;
    int CLIENT_CONNECTED = 2;
}
LiveChatServer.java:

控制多个客户端的单个服务器

package com.chat;

/************************ Live Chat Server *******************/

import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.LinkedHashMap;

public class LiveChatServer {

    // Connection state info
    private static LinkedHashMap<String, ClientThread> clientInfo = new LinkedHashMap<String, ClientThread>();

    // TCP Components
    private ServerSocket serverSocket;

    // Main Constructor
    public LiveChatServer() {

        startServer();// start the server
    }

    public void startServer() {
        String port = "1234";

        try {
            // in constractor we are passing port no, back log and bind address whick will be local
            // host
            // port no - the specified port, or 0 to use any free port.
            // backlog - the maximum length of the queue. use default if it is equal or less than 0
            // bindAddr - the local InetAddress the server will bind to

            int portNo = Integer.valueOf(port);
            serverSocket = new ServerSocket(portNo, 0, InetAddress.getLocalHost());
            System.out.println(serverSocket);

            System.out.println(serverSocket.getInetAddress().getHostName() + ":"
                    + serverSocket.getLocalPort());

            while (true) {
                Socket socket = serverSocket.accept();
                new ClientThread(socket);
            }
        } catch (IOException e) {
            System.out.println("IO Exception:" + e);
            System.exit(1);
        } catch (NumberFormatException e) {
            System.out.println("Number Format Exception:" + e);
            System.exit(1);
        }
    }

    public static HashMap<String, ClientThread> getClientInfo() {
        return clientInfo;
    }

    // *********************************** Main Method ********************

    public static void main(String args[]) {
        new LiveChatServer();
    }

}
客户1:

Trying to connect with server...
Server IP Address:computerName
Trying to connect with server...
Server Port No:1234
Enter your name:
abc
Total Client:1
1:Abc
Total Client:2
1:Abc
2:Xyz
客户2:

Trying to connect with server...
Server IP Address:computerName
Trying to connect with server...
Server Port No:1234
Enter your name:
xyz
Total Client:2
1:Abc
2:Xyz

你试过什么吗?不知道从哪里开始。有一些方面,我被告知应该在模型中,但我不知道如何从模型而不是视图代理中实现它们。嗨,我喜欢你的程序,但是如果用户x、y、w、z连接,用户z只与用户x交谈,那么如果我有两个用户的IP地址,那怎么可能呢..请告诉我你真的喜欢它吗?您拥有所有已连接用户的列表
LinkedHashMap clientInfo
。用户
z
将首先提交
z
想要交谈的用户的姓名,然后简单地迭代列表并仅将消息发送给所需的用户
x
ServerSocket[addr=computerName/IPAddress,port=0,localport=1234]
computerName:1234
Abc added at 1 position
Xyz added at 2 position
Trying to connect with server...
Server IP Address:computerName
Trying to connect with server...
Server Port No:1234
Enter your name:
abc
Total Client:1
1:Abc
Total Client:2
1:Abc
2:Xyz
Trying to connect with server...
Server IP Address:computerName
Trying to connect with server...
Server Port No:1234
Enter your name:
xyz
Total Client:2
1:Abc
2:Xyz