gpt4 book ai didi

java - 如何使客户端-服务器 Java 应用程序在一个端口上发送消息但在另一个端口上接收消息?

转载 作者:行者123 更新时间:2023-12-02 04:02:31 25 4
gpt4 key购买 nike

我目前正在尝试创建一个应用程序,该应用程序将使用一个端口向服务器发送消息,但会在另一个端口上接收消息。然而,根据我遵循的教程,看起来连接到服务器的行为是端口发挥作用的地方,而我的客户端正在同一端口上接收和发送消息。我该如何使其在一个端口上发送但在另一个端口上接收?

这是我认为与客户端相关的代码(我放置了一些看似无关的内容,因为我认为它们是通过在一个端口上接收但在另一个端口上发送而改变的东西,并忽略有关替换的注释inetaddress,这只是我在 gui 中实现这一点):

public void startRunning(){
try{
connectToServer();
setupStreams();
whileChatting();

}catch(EOFException eofException){
showMessage("\n Client terminated connection");

}catch(IOException ioException){
ioException.printStackTrace();
}finally{
closeStuff();
}

}



//connect to server
private void connectToServer() throws IOException{
showMessage("Attempting connection... \n");
connection = new Socket(InetAddress.getByName(serverIP), 480);//replace serverIP with ipTextField.getText or set serverIP to equal ipTextField.getText? Same with port number.
showMessage("Connected to: " + connection.getInetAddress().getHostName() );
}


//set up streams to send and receive messages
private void setupStreams() throws IOException{
output = new ObjectOutputStream(connection.getOutputStream());
output.flush();
input = new ObjectInputStream(connection.getInputStream());
showMessage("\n Streams are good! \n");
}


//while talking with server
private void whileChatting() throws IOException{
ableToType(true);
do{
try{
message = (String) input.readObject();
showMessage("\n" + message);
}catch(ClassNotFoundException classNotfoundException){
showMessage("\n Don't know that object type");
}

}while(!message.equals("SERVER - END"));
}

//send messages to server
private void sendMessage(String message){
try{
output.writeObject("CLIENT - " + message);
output.flush();
showMessage("\nCLIENT - " + message);
}catch(IOException ioException){
messageWindow.append("\n something messed up ");
}

}


//change/update message window
private void showMessage(final String m){
SwingUtilities.invokeLater(
new Runnable(){
public void run(){
messageWindow.append(m);
}
}
);

}

编辑/更新:为了帮助澄清一些事情,这里有一些更多信息。发送第一条消息的设备连接到传感器,当该传感器检测到某些内容时,它会向其他设备发送信息。接收设备在不同的端口上发送回一条消息,告诉原始发送设备如何响应。让我们将这两个设备命名为“记者-行动执行者”和“决策者-指挥官”。

最佳答案

如果您想使用 TCP/IP 套接字,则不能使用一个套接字来发送,另一个套接字来读取。这不是他们的目的。

如果您使用集中式分布式算法(服务器/客户端通信),则必须将服务器设置为使用 ServerSocket 类监听单个套接字端口:然后服务器尝试通过该套接字接受客户端。

示例:

ServerSocket listener = new ServerSocket(Port)
While (true) {
new Clienthandler(listener.accept());
}

服务器将监听该端口,当客户端尝试连接到该端口(如果该端口被接受)时,服务器将启动其处理程序。在此处理程序构造函数中,客户端上使用的 Socket 对象通过参数接收,然后可用于获取写入者和读取者。该处理程序类的读者将是客户端类的编写者,反之亦然,也许这就是您正在寻找的。

关于java - 如何使客户端-服务器 Java 应用程序在一个端口上发送消息但在另一个端口上接收消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34752036/

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