具有多客户端通信的Java服务器。
我正在为一项任务做一个游戏。我用Java设置了一个服务器和多客户端,我们使用的是MVC。我需要让一个客户端将他们的名字发送到服务器,然后当有两个玩家在场时,我需要将这两个名字连同他们的玩家号码(玩家1或玩家2)一起发送回客户端。我不知道如何分辨信息来自哪个线程,或者信息发送到哪个线程,所以不是所有玩家都认为自己是玩家一。谢谢 有两个线程,一个用于用户1,一个用于用户2。它们应该使用共享对象相互通信,并在事件发生时通知彼此。当第一个用户连接时生成线程1,当第二个用户连接时生成线程2。在这里,我将与您共享一个不错的聊天程序,其中一台服务器根据您的要求使用TCP协议与多个客户端通信 该计划包括:具有多客户端通信的Java服务器。,java,multithreading,model-view-controller,client,Java,Multithreading,Model View Controller,Client,我正在为一项任务做一个游戏。我用Java设置了一个服务器和多客户端,我们使用的是MVC。我需要让一个客户端将他们的名字发送到服务器,然后当有两个玩家在场时,我需要将这两个名字连同他们的玩家号码(玩家1或玩家2)一起发送回客户端。我不知道如何分辨信息来自哪个线程,或者信息发送到哪个线程,所以不是所有玩家都认为自己是玩家一。谢谢 有两个线程,一个用于用户1,一个用于用户2。它们应该使用共享对象相互通信,并在事件发生时通知彼此。当第一个用户连接时生成线程1,当第二个用户连接时生成线程2。在这里,我将与
- 无论新客户添加到何处,都会通知每个客户及其姓名和职位
- 它还检查现有名称。程序不允许多个客户端使用相同的名称
- 第一次只运行一次LiveChatServer
- 然后为多个客户端运行LiveChatClient,您可以添加任意数量的客户端
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