gpt4 book ai didi

java - 点对点聊天无法接收/发送消息

转载 作者:行者123 更新时间:2023-12-02 09:54:46 24 4
gpt4 key购买 nike

我正在尝试创建相互连接的对等点,并且能够向它们同时连接的每个人发送/接收消息。它们都在同一台机器上运行。连接到对等点并获取套接字连接后,我将启动两个线程,一个正在读取,一个正在写入。但是,readLine()无限期地阻塞,我不确定问题出在哪里。对等点成功相互连接,但消息交换失败。中断一个对等点会导致从与其连接的其他对等点读取一条“null”消息。

编辑:在PrintWriter中使用autoflush = true会向连接到的其他对等点抛出“ConnectionReset”异常被中断的对等点。

我尝试在发送消息之前等待读取线程启动,从对等端的任一端获取套接字连接,将输入/输出流存储在存储为成员变量的列表中,并且仅传递套接字/所有流到每个线程。还尝试了不同的阅读方式,如阅读帖子中的评论所示。


class ConnectionListener extends Thread{

public void run(){

try {
while (!allPeersJoined()) {

Socket socket = null;
socket = peerServer.accept();



new PeerReader(socket).start();
new PeerWriter(socket).start();
}

}catch (IOException e){
e.printStackTrace();
}

}

}
}


class PeerWriter extends Thread{


PrintWriter writer;

public PeerWriter(Socket socket){
try {
this.writer = new PrintWriter(socket.getOutputStream(), true);
}catch (IOException e){
e.printStackTrace();
}

}

@Override
public void run() {
writer.println("Hello");
}


}

class PeerReader extends Thread{

BufferedReader reader;

public PeerReader(Socket socket){
try {
this.reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}catch (IOException e){
e.printStackTrace();
}

}

@Override
public void run() {
String input = "";


System.out.println("Waiting to receive messages...");
try {


System.out.println(reader.readLine());


// while((input = reader.readLine()) != null){
// System.out.println(input);
// }

}catch (IOException e){
e.printStackTrace();
}

}
}

编辑:添加套接字创建


Thread t = new ConnectionListener();
t.start();

// Connect to all peers
for (String peer : peers) {
new Socket("127.0.0.1", Integer.valueOf(peer));
}


最佳答案

您正在创建多个套接字,但从未使用它们。

现在 ConnectionListener 获取您的连接,在连接的套接字上发送字节,但套接字永远不会响应......因为您从未告诉它们这样做。

您应该以与 ConnectionListener 相同的方式创建一个名为ClientConnection,有自己的编写器和读取器。

关于java - 点对点聊天无法接收/发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56076583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com