- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 Java 服务器,两个控制一个 Android 在线游戏。
是否可以将 myserversocket.accept() 的客户端套接字保存在 Client 类的变量中?
这非常有用,因为这样,服务器可以在服务器需要时与客户端通信,而在客户端联系服务器时则不能。
我的实际代码是:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.UUID;
import sal.app.shared.Packet;
public class Server {
private ArrayList games = new ArrayList();
private ArrayList pendent_clients = new ArrayList();
private Packet read_packet= new Packet();
private Packet sent_packet = new Packet();
private Socket clientSocket = null;
public static void main(String[] args) throws ClassNotFoundException{
ServerSocket serverSocket = null;
//DataInputStream dataInputStream = null;
//DataOutputStream dataOutputStream = null;
ObjectOutputStream oos=null;
ObjectInputStream ois=null;
Server myServer = new Server();
thử {
serverSocket = new ServerSocket(7777);
System.out.println("Listening :7777");
} bắt (IOException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}
while(true){
thử {
myServer.clientSocket = new Socket();
myServer.clientSocket = serverSocket.accept();
myServer.read_packet = new Packet();
myServer.sent_packet = new Packet();
oos = new ObjectOutputStream(myServer.clientSocket.getOutputStream());
ois = new ObjectInputStream(myServer.clientSocket.getInputStream());
//dataInputStream = new DataInputStream(clientSocket.getInputStream());
//dataOutputStream = new DataOutputStream(clientSocket.getOutputStream());
//System.out.println("ip: " + clientSocket.getInetAddress());
//System.out.println("message: " + ois.read());
//dataOutputStream.writeUTF("Hello!");
/*while ((myServer.read_packet = (Packet) ois.readObject()) != null) {
myServer.handlePacket(myServer.read_packet);
phá vỡ;
}*/
myServer.read_packet=(Packet) ois.readObject();
myServer.handlePacket(myServer.read_packet);
//oos.close();
} bắt (IOException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}
finally{
if( myServer.clientSocket!= null){
/*try {
//myServer.clientSocket.close();
} bắt (IOException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}*/
}
/*if( ois!= null){
thử {
ois.close();
} bắt (IOException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}
}
if( oos!= null){
thử {
oos.close();
} bắt (IOException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}
}*/
}
}
}
public void handlePacket(Packet hp) throws IOException
{
if(hp.getOpCode() == 1)
{
registPlayer(hp);
}
}
public void registPlayer(Packet p) throws IOException
{
Client registClient = new Client(this.clientSocket);
this.pendent_clients.add(registClient);
if(pendent_clients.size() == 2)
{
initAGame();
}
khác
{
ObjectOutputStream out=null;
Packet to_send = new Packet();
to_send.setOpCode(4);
out = new ObjectOutputStream(registClient.getClientSocket().getOutputStream());
out.writeObject(to_send);
}
}
public void initAGame() throws IOException
{
Client c1 = pendent_clients.get(0);
Client c2 = pendent_clients.get(1);
Packet to_send = new Packet();
ObjectOutputStream out=null;
GameSession incomingGame = new GameSession(c1,c2);
games.add(incomingGame);
to_send.setGameId(incomingGame.getGameId());
to_send.setOpCode(5);
out = new ObjectOutputStream(c1.getClientSocket().getOutputStream());
out.writeObject(to_send);
out = new ObjectOutputStream(c2.getClientSocket().getOutputStream());
out.writeObject(to_send);
pendent_clients.clear();
}
public Client getClientById(UUID given_id)
{
for(GameSession gs: games)
{
if(gs.getClient1().getClientId().equals(given_id))
{
return gs.getClient1();
}
else if(gs.getClient2().getClientId().equals(given_id))
{
return gs.getClient2();
}
}
trả về giá trị null;
}
}
使用这段代码我得到了这个错误:
java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1847)
at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.java:1756)
at java.io.ObjectOutputStream.writeNonProxyDesc(ObjectOutputStream.java:1257)
at java.io.ObjectOutputStream.writeClassDesc(ObjectOutputStream.java:1211)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1395)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
at java.io.ObjectOutputStream.writeFatalException(ObjectOutputStream.java:1547)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:333)
at Server.initAGame(Server.java:146)
at Server.registPlayer(Server.java:120)
at Server.handlePacket(Server.java:106)
at Server.main(Server.java:63)
当第二个客户端连接并且服务器尝试在以下代码中的函数 initGame() 中将数据包发送到前一个客户端 1 时,会发生此错误:
out = new ObjectOutputStream(c1.getClientSocket().getOutputStream());
out.writeObject(to_send);
我的android代码是这样的:
package sal.app;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import sal.app.logic.DataBaseManager;
import sal.app.shared.Packet;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
public class MultiPlayerWaitActivity extends Activity{
private DataBaseManager db;
public void onCreate(Bundle savedInstanceState) {
super.requestWindowFeature(Window.FEATURE_NO_TITLE);
super.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.multiwaitlayout);
db=DataBaseManager.getSalDatabase(this);
db.teste();
thử {
db.createDataBase();
} bắt (IOException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}
Socket socket = null;
ObjectOutputStream outputStream = null;
ObjectInputStream inputStream = null;
//System.out.println("dadadad");
thử {
socket = new Socket("192.168.1.4", 7777);
//Game = new MultiPlayerGame(new ServerManager("192.168.1.66"),new Session(), new Player(""));
outputStream = new ObjectOutputStream(socket.getOutputStream());
inputStream = new ObjectInputStream(socket.getInputStream());
//dataOutputStream.writeUTF(textOut.getText().toString());
//textIn.setText(dataInputStream.readUTF());
Packet p = new Packet();
Packet r = new Packet();
p.setOpCode(1);
outputStream.writeObject(p);
/*try {
r=(Packet)inputStream.readObject();
} catch (ClassNotFoundException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}*/
//while(true){
//dataInputStream = new DataInputStream(clientSocket.getInputStream());
//dataOutputStream = new DataOutputStream(clientSocket.getOutputStream());
//System.out.println("ip: " + clientSocket.getInetAddress());
//System.out.println("message: " + ois.read());
//dataOutputStream.writeUTF("Hello!");
/*while ((r= (Packet) inputStream.readObject()) != null) {
handPacket(r);
phá vỡ;
}*/
r=(Packet) inputStream.readObject();
handPacket(r);
//oos.close();
//}
/*System.out.println(r.getOpCode());
if(r.getOpCode() == 5)
{
this.finish();
}*/
} catch (UnknownHostException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
} bắt (IOException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}
/*finally{
if (socket != null){
thử {
socket.close();
} bắt (IOException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}
}
if (outputStream != null){
thử {
outputStream.close();
} bắt (IOException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}
}
if (inputStream != null){
thử {
inputStream.close();
} bắt (IOException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}
}
}*/ //catch (ClassNotFoundException e) {
// TODO Khối catch được tạo tự động
//e.printStackTrace();
//}
catch (ClassNotFoundException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}
}
public void handPacket(Packet hp)
{
if(hp.getOpCode() == 5)
{
this.finish();
}
this.finish();
}
}
问候
1 Câu trả lời
如果您希望服务器能够在需要时联系客户端,那么每当服务器使用accept()方法获取客户端Socket对象时,根据您的需要将其存储在HashMap或ArrayList中。现在您已经将客户端套接字对象与服务器一起保存了。
关于java - 在 Java 服务器中重用客户端 java 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10870892/
我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我的第一个想法如下: 我在服务器上创建了一个中央 ServerSocket,所有应用程序都可以连接到该服务器。
我正在 Unity 中构建多人游戏。为此,我必须将一些值从客户端发送到两个或多个通过服务器连接的客户端。我想将其构建为服务器真实游戏。客户端将使用 Android,他们的数据将通过服务器同步(可能是一
练习 C 网络编程:我正在编写一个简单的 TCP 客户端-服务器应用程序,它应该将消息(在每个客户端的单独线程中)作为字符串从服务器发送到客户端并在客户端(稍后将成为控制台商店应用程序)。我首先发送消
我使用证书身份验证设置了 AWS Client VPN。我正在为客户端-客户端访问系统进行设置,基本上如 this AWS scenario/example 中所述.一切正常,如果我知道他们的 IP
我正在开发一个小型客户端1/客户端2、服务器(线程)TCP 游戏。在尝试处理延迟问题时,我意识到我的 transmitState() 中存在缺陷。它强制将不必要的信息传递到通讯流中,从而造成迟缓,将汽
来自文档:Configurable token lifetimes in Azure Active Directory (Public Preview) 它提到“ secret 客户端”,刷新 tok
Apollo 客户端开发工具无法连接到我的应用程序。我已在 ApolloClient 构造函数中将 connectToDevTools 传递为 true,但没有任何 react 。我也试过this p
我想在 Pod 内使用 Fabric8 kubernetes 客户端 (java)。如何获取部署集群的 kubernetes 客户端? 我可以使用该集群的 kubeconfig 文件获取任何集群的配置
我正在阅读 the security issue with Log4j我了解此产品受此漏洞影响。但是 Oracle 客户端 11.2 和 12 是否受此问题影响? 我找不到这些产品是否使用任何 Log
Eureka 服务器设置 pom.xml 1.8 Hoxton.SR1 org.springframework.cloud spring
我有一个点对点(客户端/服务器)设置(通过本地 LAN),它使用 Netty,一个 Java 网络框架。我使用原始 TCP/IP(例如,没有 HTTP)进行通信和传输。现在,根据要求,我们希望转向 T
上一篇已经实现了ModbusTcp服务器和8个主要的功能码,只是还没有实现错误处理功能。 但是在测试客户端时却发现了上一篇的一个错误,那就是写数据成功,服务器不需要响应。 接下来要做的就是实现Modb
有没有办法将二维十六进制代码数组转换为 png 图像? 数组看起来像这样(只是更大) [ [ '#FF0000', '#00FF00' ], [ '#0000FF'
我是套接字编程的新手。每次我运行客户端程序时,它都会说“无法连接到服务器”。谁能告诉我我在哪里犯了错误。任何帮助将不胜感激。 这是client.c #include #include #inclu
我们在UNIX环境下制作了简单的client.c和server.c程序。我们使用它来传输一个简单的文本文件,首先打开它,然后读取它并使用 open、read 和 send 系统调用发送;在客户端,我接
当我的程序来自 my previous question正在响应客户端,它应该发送加密消息。 当客户端连接时,它会发送一条类似“YourMessage”的消息。现在我想做的是,当客户端连接时,应该以某
我正在使用 C 和 putty 编写客户端/服务器程序。两个 c 文件位于同一系统上。 我目前在向客户端写回其正在使用的框架以及打印我的框架时遇到问题。它打印出 3 0 9 8,但随后开始打印 134
我正在使用 C 中的 select() 制作一个模拟快餐或其他任何东西的客户端服务器。 我有客户随机点 1-5 种“食物”。服务器每 30 秒决定一次。所有客户最喜欢的食物是什么?他为那些客户提供服务
对于单机游戏,基本的游戏循环是(来源:维基百科) while( user doesn't exit ) check for user input run AI move enemies
1、CentOS安装TortoiseSVN 复制代码 代码如下: yum install -y subversion 2、SVN客户端命令
Tôi là một lập trình viên xuất sắc, rất giỏi!