在服务器上,当我获得一个新连接(serverSocket.accept()
)时,我将该连接套接字传递给名为ServerPlayer.java的类的实例,该类从线程扩展。
我还创建了一个OutputObjectStream和一个InputObjectStream并将它们传递给新的ServerPlayer实例,然后将ServerPlayer实例添加到ArrayList以跟踪它们。
当我在新的ServerPlayer上调用start()
时,我让它写一个字节(1)。
然后,我让我的客户端运行一个侦听线程,侦听来自TCP服务器的传入数据。但是,我没有收到我从服务器发送的(1)。我不确定服务器是否没有正确发送它,或者客户端是否没有正确接收它…
ServerPlayer.java:
/**
* ServerPlayer.java
* Creates a new instance of a player on the server, gives it
* an output and input stream, as well as the socket it came in on
*/
package server;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ServerPlayer extends Thread {
UIServer ui;
Socket socket;
ObjectOutputStream os;
ObjectInputStream is;
int id = -1;
ServerPlayer(Socket socket, ObjectOutputStream os, ObjectInputStream is, UIServer ui){
this.socket = socket;
this.os = os;
this.is = is;
this.ui = ui;
}
public void setID(int id){
this.id = id;
}
public int getID(){
return this.id;
}
public void run(){
boolean keepGoing = true;
System.out.println("SERVERPLAYER THREAD START");
try {
os.writeByte(1);
System.out.println("sent byte 1 from server");
} catch (IOException ex) {
Logger.getLogger(ServerPlayer.class.getName()).log(Level.SEVERE, null, ex);
}
while(keepGoing){
try{
Byte msg = is.readByte();
int mes_id = msg.intValue();
ui.console.println("SERV MESSAGE#: " + mes_id);
} catch (IOException ex) {
Logger.getLogger(ServerPlayer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
ListenFromServer.Java:
/*
* ListenFromServer.java
* Listens for incoming data from the TCP Server (this is on the client side)
*/
package client;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ListenFromServer extends Thread {
TCPClient client;
boolean isRunning = false;
public ListenFromServer(TCPClient client){
this.client = client;
}
public void run(){
System.out.println("listen from server thread start");
isRunning = true;
while(isRunning){
try {
Byte b = client.sInput.readByte();
client.ui.console.println("BYTE: " + b.intValue());
} catch (IOException ex) {
Logger.getLogger(ListenFromServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
尝试更改为
os.writeByte(1);
os.flush();
我有一个示例代码如下,套接字绑定到IP10.10.88.11和端口9876。我用下面的wireshark测试了2种情况。两台电脑都在同一个子网中。 从同一PC发送UDP数据包(10.10.88.11)-UDP服务器能够接收 从另一台电脑发送UDP数据包(10.10.88.10)-UDP服务器无法接收,但Wireshark(在10.10.88.11)能够捕获数据包 我在网上搜索过,但找不到解决办法。
我试图让一些基于PAHO的客户机使用Vert.x MQTT服务器。我试图发布到我的接收客户端订阅的测试主题。我很难从客户端发布者向客户端订阅者发送消息。 使用我在Internet上看到的真实例子,我构建了一个MQTT代理。vert.x MQTT代理代码的代码如下所示: 我很确定我在这里错过了什么,但我想不出会是什么。有人能帮我把这个弄好吗??? 提前感谢您的任何帮助或见解。
使用@value(${fanout.exchange})注释在使用带有Github Repo的spring-cloud-config服务器时初始化失败。我得到: 这两个类的pom.xml上都有spring-cloud-config。configServer使用@EnableConfigServer进行注释。我在github repo中的文件名为datacollector.properties Ra
我正在尝试使用UDP在服务器(在公共IP上)和客户端(通过NAT)之间进行双向通信。我的逻辑是,如果服务器向IP和它接收数据包的端口发送一些数据,客户端仍然应该得到它,因为NAT最终会有将数据包发送到客户端的映射。 客户端有 2 个进程,一个用于发送数据包,另一个进程用于接收数据。服务器继续等待数据,如果它获得数据,它会将数据发送回从接收数据的端口和 IP。 客户代码如下: client_recv
问题内容: 我要进行最简单的解释。我的Java TCP项目有一个服务器和三个客户端。 服务器具有一个ClientThread。每个客户端都有一个ServerThread和一个UserThread。 工作流程为: 1.客户端(例如,client_0)的UserThread获取用户输入,然后将消息发送到服务器。 2.服务器的ClientThread捕获来自client_0的消息,并将另一条消息发送到另
问题内容: 我要进行最简单的解释。我的Java TCP项目有一个服务器和三个客户端。 服务器具有一个ClientThread。每个客户端都有一个ServerThread和一个UserThread。 工作流程为: 1.客户端(例如,client_0)的UserThread获取用户输入,然后将消息发送到服务器。 2.服务器的ClientThread捕获来自client_0的消息,并将另一条消息发送到另
我的docker版本是1.13.1。我正试图从我的docker容器连接到redis-server,但我遇到了拒绝连接的错误。详细的日志如下: 原因:redis.clients.jedis.exceptions.jedisconnectionException:java.net.Connection:redis.clients.jedis.Connection(Connection.java:207
我试图创建一个Unix套接字数据报示例。客户端可以流畅地发送和接收消息。在缓冲区长度小于< code>SOCKET_BUFFER_SIZE的情况下,服务器能够做到这一点,否则服务器的输出会在接收的缓冲区显示一些无效字符。 客户代码 服务器的代码 头文件 这是我得到的 奇怪的是,客户端收到了预期的消息,尽管服务器在发送之前没有正确格式化消息。 这是我的预期输出 我该如何解决?