gpt4 book ai didi

java - 服务器端口未收到 UDP 消息

转载 作者:行者123 更新时间:2023-11-28 00:12:29 25 4
gpt4 key购买 nike

我正在尝试在我的本地计算机上实现服务器-客户端关系。

我有一个 java 程序充当服务器,它在端口 4567 上监听。我有一个 java 程序充当客户端,它打开到 127.0.0.1:4567 的连接并发送消息。

一切正常,正在接收消息。

问题

我用 C++ 实现了客户端程序,使用 boost asio 以相同的方式发送消息,但它不起作用,尽管消息已成功发送。

不工作的 C++ 客户端代码:

    using namespace boost::asio;
io_service io_service;
ip::udp::socket socket(io_service);
ip::udp::endpoint remote_endpoint;

socket.open(ip::udp::v4());

remote_endpoint = ip::udp::endpoint(ip::address::from_string("127.0.0.1"), 4567);

boost::system::error_code err;
string msg = err.message();

socket.send_to(buffer("test_from_c++", 13), remote_endpoint, 0, err);

msg = err.message();
cout << err.message() << endl;

socket.close();

输出是

The operation completed successfully

此外,这里是 有效 的 java 客户端代码。

String address = "127.0.0.1";
int port = 4567;
Socket socket = new Socket(address, port);
System.out.println("Successfully opened socket for communication to " + address + " on port " + port);

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
out.write("test_from_java");
out.newLine();

out.close();
socket.close();

最佳答案

C++ 代码正确发送了 UDP 消息。有关演示,请参见 here

问题很可能是服务器需要一个 TCP 连接,并且不会接收使用不同传输协议(protocol)的数据。 Java 客户端使用提供 TCP 通信的 java.net.Socket 类。另一方面,java.net.DatagramSocket 类用于 UDP 通信。

这是一个等效的 TCP 客户端 demonstrated :

#include <iostream>
#include <boost/asio.hpp>

int main()
{
using namespace std;
using namespace boost::asio;
io_service io_service;
ip::tcp::socket socket(io_service);
ip::tcp::endpoint remote_endpoint;

remote_endpoint = ip::tcp::endpoint(ip::address::from_string("127.0.0.1"), 4567);
socket.connect(remote_endpoint);

boost::system::error_code err;
string msg = err.message();

socket.send(buffer("test_from_c++", 13), 0, err);

msg = err.message();
cout << err.message() << endl;

socket.close();
}

关于java - 服务器端口未收到 UDP 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32275502/

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