当前位置: 首页 > 知识库问答 >
问题:

如何让服务器在点击按钮时向客户端发送消息

郑茂勋
2023-03-14

我有一个客户端和一个服务器。当客户端连接到服务器时,服务器向客户端发送消息。如果用户点击“新消息”按钮,我希望服务器向客户端发送一条新消息。我怎样才能做到这一点?

我的代码(我已经删除了所有 try-Catch)

客户:

private void getExpression() {
    Socket s = null;     

     s = new Socket(serverAddress, serverPort);                     
     out = new ObjectOutputStream(s.getOutputStream());             
     in = new ObjectInputStream(s.getInputStream());     

     while (true) {          
         Expression exp = (Expression) in.readObject();                    
         String message = exp.toString();
         expressionLabel.setText(message);  
      } 
    }

    public void newMessage() throws IOException {  
         //MAKE SERVER SEND NEW MESSAGE
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        if (ae.getSource().equals(newButton)) {
            newMessage();    
        }  
    }

处理人:

public class Handler extends Thread {    
    private Socket socket;              
    private String address;             

    public Handler (Socket s) {
        socket = s;
            address = socket.getInetAddress().getHostAddress();
    }

    @Override
    public void run() { 
        ObjectInputStream in = null;   
        ObjectOutputStream out = null;  

        out = new ObjectOutputStream(socket.getOutputStream());     
        in = new ObjectInputStream(socket.getInputStream());         

        out.writeObject(new Expression());               
        out.flush();
   }

服务器:

private int port;

    public TestProgram(int port) {
        this.port = port;
        go();
    }

    public void go() {
        ServerSocket ss = null;    
        ss = new ServerSocket(port);   

        while (true) {
           Socket s = ss.accept();
           new Handler(s).start();                                 
        }
    }

共有1个答案

岳景明
2023-03-14

你想得到什么信息?一个随机的信息还是预先设定的?正在使用图形用户界面。

如果您使用gui并试图获取消息,我希望您做这样的事情

JButton newButton = new JButton("New Message");
newButton.addActionListener(this);
this.add(newButton);

public void newMessage() {
System.out.println(in.readObject().toString);
}


public void actionPerformed(ActionEvent ae) {
    if (ae.getSource().equals(newButton)) {
        newMessage();    
    }  
}

您的后端客户端可能如下所示

这是一个示例,因此请将其拆开并使用您想要的内容:

// Client.java: The client sends the input to the server and receives
// result back from the server
import java.io.*;
import java.net.*;
import java.util.*;

public class Client
{
// Main method
public static void main(String[] args)
{
  // IO streams
  DataOutputStream toServer;
  DataInputStream fromServer;

try
{
  // Create a socket to connect to the server
  Socket socket = new Socket("localhost", 8000);

  // Create input stream to receive data
  // from the server
  fromServer = new DataInputStream(socket.getInputStream());

  // Create a output stream to send data to the server
  toServer = new DataOutputStream(socket.getOutputStream());

    Scanner scan= new Scanner (System.in);

  // Continuously send radius and receive area
  // from the server
  while (true)
  {
    // Read the m/s from the keyboard
    System.out.print("Please enter a speed in meters per second: ");
    double meters=scan.nextDouble();

    // Send the radius to the server
    toServer.writeDouble(meters);
      toServer.flush();


    // Convert string to double
    double kilometersPerHour = fromServer.readDouble();

    // Print K/h on the console
    System.out.println("Area received from the server is "
      + kilometersPerHour);
  }
}
catch (IOException ex)
{
  System.err.println(ex);
}
  }
}

您的后端服务器应该看起来像这样

/* 
* Created by jHeck
*/
// Server.java: The server accepts data from the client, processes it
// and returns the result back to the client
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.DecimalFormat;

public class Server 
{
// Main method
public static void main(String[] args)
{ 
  try
{
  // Create a server socket
  ServerSocket serverSocket = new ServerSocket(8000);

  // Start listening for connections on the server socket
  Socket socket = serverSocket.accept();

  // Create data input and output streams
  DataInputStream inputFromClient = new DataInputStream(socket.getInputStream());
DataOutputStream outputToClient = new DataOutputStream(socket.getOutputStream());


  // Continuously read from the client and process it,
  // and send result back to the client
  while (true)
  {

    // Convert string to double
    double meters = inputFromClient.readDouble();

    // Display radius on console
    System.out.println("Meters received from client: "
      + meters);

    // Compute area
    double conversionToKilometers = (meters/1000)*3600;

    // Send the result to the client
    outputToClient.writeDouble(conversionToKilometers);

    //Create double formater
    DecimalFormat format = new DecimalFormat("0.00");
    String formatedCTK = format.format(conversionToKilometers);

    // Print the result to the console
    System.out.println("Kilometers per hour = "+ formatedCTK);
  }
}
catch(IOException ex)
{
  System.err.println(ex);
}
  }
}
 类似资料:
  • 问题内容: 我将实现类似于Facebook通知和此网站的内容(StackOverflow的通知会通知我们是否有人为我们的问题写评论/答案等)。请注意,用户将使用我的应用程序作为网站而不是移动应用程序。 我遇到以下获取结果的答案,但我需要推送结果而不是获取结果。 根据建议,我在实体类中创建了一个简单方法,并向其中添加了@PostPersist,但此方法不起作用,因此基于此答案,我添加了persist

  • 问题内容: 所以现在,我正在制作一个基于客户端服务器应用程序的多线程。在服务器端,我为接受的每个连接创建了一个线程。 在线程类中,我创建了一种将命令发送到客户端的方法。我只想要的是如何将参数发送到所有正在运行的客户端?为简单起见,我只想使此服务器向所有连接的客户端发送消息。 我已经阅读了这篇文章,并从此链接中找到方法。但是,当我尝试使用自己的代码时,中没有类似的方法。 好的,这是我的服务器和线程示

  • 当我提交表单时,我在浏览器控制台中看到“emit”消息,所以我知道表单提交事件正在触发,但我没有在服务器上收到测试消息。客户端或服务器端似乎什么也没发生,“socket.emit”函数似乎什么也没做。 我做错了什么?

  • 问题内容: 在以下SSCCE中, 我有一个字符串,其中包含3 秒的HTML 。 我为除第一个之外的所有s 添加了一个属性。 我添加一个按钮,所有的小号除了最后一个,并添加一个JS 事件侦听器,应该改变当前‘样式属性s到(当前的传递给JS功能属性),并在未来的(这是还传递给JS函数)样式属性 我在最后提交一个按钮。我没有为此按钮编写“ 事件” 或“事件监听器” 的属性,因为现在这不是问题。 我打印d

  • 问题内容: 我是golang和websocket的新手。 我正在尝试编写一个websocket服务器,一旦握手完成,该服务器可以将消息主动发送到客户端。 但是我的服务器只会在收到来自客户端的请求后才将消息发送给客户端。 有谁知道如何实现此功能,或者在哪里可以找到相关的答案? 非常感谢。 源代码如下: 问题答案: 尝试打包websocket。 这是Godoc的一个简单示例:

  • 问题内容: 我正在尝试创建一个可以从服务器向客户端发送消息的python应用程序。目前,我正在从这里使用此示例代码。这是一个聊天应用程序,并且运行良好。我试图修改该应用程序,并在服务器端python代码中添加了一个新功能,该功能将在客户端打印一条消息“ Dummy”,但似乎不起作用。 这是我的html代码: index.html 这是我的后端代码: web_app.py main.py 我可以在终