服务器端口没有接收到UDP消息
UDP message not being received on server port
我正在尝试实现一个服务器-客户端关系,所有在我的本地机器上。
我有一个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消息。请看这里的演示。
这个问题很可能是服务器正在等待一个TCP连接,并且不会接收使用不同传输协议的数据。Java客户端使用提供TCP通信的java.net.Socket
类。另一方面,java.net.DatagramSocket
类用于UDP通信。
#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();
}
相关文章:
- 如何在C++中创建特定大小的消息以通过UDP套接字发送?
- C++ UDP 服务器在获取客户端地址配置时发送消息
- UDP 客户端不会在 esp32 上广播消息
- C# UDP 套接字无法接收消息
- 来自 C++ 的 UDP 消息不会被 Rust 接收
- 从 ICMP 消息访问 UDP
- 打包用于 UDP 网络的消息
- UDP测试代码未接收消息(C++)
- 如何将 UDP 消息发送到局域网中的每台计算机
- C++ 同时接收 2 条或更多 UDP 消息
- 即使在客户端停止或服务器重新启动后,UDP 消息仍会不断到达
- 将多个 UDP 消息发送到单个修订者
- 将结构转换为要传递给 UDP 的常规消息格式
- 在一条UDP消息中发送两个数据块,而不复制数据块
- UDP套接字是否将接收到的数据划分为不同的消息,或者recv是否同时读取尽可能多的数据
- libcurl是否能够通过UDP发送http消息
- 使用boost的多种数据类型的Udp消息
- 服务器端口没有接收到UDP消息
- 简单UDP套接字代码,发送和接收消息
- Linux-app无法从169.254.x获取UDP消息.X(本地链路)