gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:32:39 24 4
gpt4 key购买 nike

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

我的代码(我已删除所有 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();
}
}

最佳答案

您想收到什么消息?随机消息还是预设的消息?正在使用 Gui?

如果您使用 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);
}
}
}

关于java - 如何让服务器在单击按钮时向客户端发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28661980/

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