消息未在 Java 后发送给客户
Message not delivering to Client in Java
我在 Java 中有一个服务器-客户端程序,在我的服务器 UI 中,我有两个 JLabel
,当我点击第一个 JLabel
消息时转到第一个客户端,但是当我再次单击它时,消息不会发送到客户端。有人可以指出我的代码有什么错误吗?
//服务器代码
void connect_clients()
{
try {
ServerSocket listener = new ServerSocket(7700);
jButton1.setText("Server Running!");
jButton1.setEnabled(false);
try {
while (true) {
socket = listener.accept();
try {
clientIP = socket.getLocalAddress().getHostName();
}
catch(Exception e){}
}
}
catch(Exception e){}
}
catch(IOException ex)
{
}
}
}
private void jLabel2MouseClicked(java.awt.event.MouseEvent evt) {
PrintWriter out;
try {
out = new PrintWriter(socket.getOutputStream(), true);
out.println("pc2");
} catch (IOException ex) {
Logger.getLogger(third_frame.class.getName()).log(Level.SEVERE, null, ex);
}
}
//客户端代码
void connect_server()
{
try {
// TODO code application logic here
String serverAddress = JOptionPane.showInputDialog(
"Enter IP Address of a machine that is\n" +
"running the date service on port 9090:");
s = new Socket(serverAddress, 7700);
BufferedReader input =
new BufferedReader(new InputStreamReader(s.getInputStream()));
String answer = input.readLine();
System.out.println(answer);
answer = null;
}
catch (IOException ex) {
Logger.getLogger(client_form.class.getName()).log(Level.SEVERE, null, ex);
}
}
注意:Socket
在服务器和客户端中都是全局声明的。
客户端代码没有循环。
关于字符串答案= input.readLine();客户端等待接收消息。一旦它从服务器接收到文本,客户端执行就完成了。
客户端未编写为接收来自服务器的所有消息。
因此,如果您回顾服务器-客户端范式,服务器会主动侦听端口,一旦客户端向服务器请求某些内容。它处理请求。
另一方面,Client 不必主动监听服务器上发生的事情,这与 Client 存在的基本思想相矛盾。
我在 Java 中有一个服务器-客户端程序,在我的服务器 UI 中,我有两个 JLabel
,当我点击第一个 JLabel
消息时转到第一个客户端,但是当我再次单击它时,消息不会发送到客户端。有人可以指出我的代码有什么错误吗?
//服务器代码
void connect_clients()
{
try {
ServerSocket listener = new ServerSocket(7700);
jButton1.setText("Server Running!");
jButton1.setEnabled(false);
try {
while (true) {
socket = listener.accept();
try {
clientIP = socket.getLocalAddress().getHostName();
}
catch(Exception e){}
}
}
catch(Exception e){}
}
catch(IOException ex)
{
}
}
}
private void jLabel2MouseClicked(java.awt.event.MouseEvent evt) {
PrintWriter out;
try {
out = new PrintWriter(socket.getOutputStream(), true);
out.println("pc2");
} catch (IOException ex) {
Logger.getLogger(third_frame.class.getName()).log(Level.SEVERE, null, ex);
}
}
//客户端代码
void connect_server()
{
try {
// TODO code application logic here
String serverAddress = JOptionPane.showInputDialog(
"Enter IP Address of a machine that is\n" +
"running the date service on port 9090:");
s = new Socket(serverAddress, 7700);
BufferedReader input =
new BufferedReader(new InputStreamReader(s.getInputStream()));
String answer = input.readLine();
System.out.println(answer);
answer = null;
}
catch (IOException ex) {
Logger.getLogger(client_form.class.getName()).log(Level.SEVERE, null, ex);
}
}
注意:Socket
在服务器和客户端中都是全局声明的。
客户端代码没有循环。
关于字符串答案= input.readLine();客户端等待接收消息。一旦它从服务器接收到文本,客户端执行就完成了。
客户端未编写为接收来自服务器的所有消息。
因此,如果您回顾服务器-客户端范式,服务器会主动侦听端口,一旦客户端向服务器请求某些内容。它处理请求。
另一方面,Client 不必主动监听服务器上发生的事情,这与 Client 存在的基本思想相矛盾。