【发布时间】:2014-02-13 17:14:54
【问题描述】:
我正在尝试用 java 制作一个聊天应用程序,但我遇到了一个问题,我无法发送到另一台机器。 这是我的部分代码:
这是我的班级客户:
public class EnvioSocket {
public static boolean enviarSocket(String nome, String ip, int porta,
String mensagem) {
String dados = nome + " : " + mensagem;
try {
Socket socket = new Socket(ip, porta);
OutputStream outToServer = socket.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
out.writeUTF(dados);
out.close();
socket.close();
} catch (UnknownHostException e) {
JOptionPane.showMessageDialog(null, e.getMessage());
return false;
} catch (IOException e) {
JOptionPane.showMessageDialog(null, e.getMessage());
return false;
}
return true;
}
}
这是我的班级服务器:
public class ServidorThread implements Runnable {
private JTextArea menssage;
public ServidorThread(JTextArea menssage) {
this.menssage = menssage;
}
@Override
public void run() {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(Porta.PORTA);
while (true) {
Socket acceptedSocket = serverSocket.accept();
DataInputStream in = new DataInputStream(
acceptedSocket.getInputStream());
String menssage = in.readUTF();
this.menssage.append(DateUtils.dateToString(new Date(), "dd/MM/yyyy HH:mm") + " " + menssage + "\n");
in.close();
acceptedSocket.close();
}
} catch (IOException e) {
JOptionPane.showMessageDialog(null, e.getMessage());
}
}
}
define a port to socket
public final class Porta {
private Porta() {
}
public static final int PORTA = 6066;
}
我只能向自己的计算机发送消息。我怎样才能解决这个问题? 我正在我的班级内开始我的线程,制作一个 GUI。
【问题讨论】:
-
您应该首先删除所有与 Swing 相关的代码。您的问题与 Swing 无关,应该在隔离分散注意力的非相关代码的情况下进行测试和调试。此外,在一个真正的聊天应用程序中,用户界面代码将与套接字通信完全分开,所以不妨现在就开始吧。
-
服务器似乎没有向任何人发送任何内容。它只是接受一个连接,接收到第一条消息并再次关闭套接字。
-
现在,您的代码比大多数人想要阅读的要多得多。考虑将其减少为SSCCE,以方便我们使用
-
我做了两个类,一个只接受连接并将消息写入文本区域,另一个只发送消息
标签: java multithreading chat instant-messaging