点对点聊天不接收/发送消息



我正在尝试创建相互连接的对等体,并能够向并发连接到它们的每个人发送/接收消息。它们都在同一台计算机上运行。一旦连接到对等体并获得套接字连接,我就会启动两个线程,一个是读取线程,另一个是写入线程。但是,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 一样,创建一个名为 ClientConnection,它有自己的编写器和读取器。

最新更新