我正在尝试在我的本地计算机上实现服务器 - 客户端关系。
我有一个充当服务器的java程序,它侦听端口4567。 我有一个java程序充当客户端,它打开与127.0.0.1:4567的连接并发送消息。
这一切都有效,正在接收消息。
问题
我使用boost asio在C ++中实现客户端程序以相同的方式发送消息,但它不起作用,尽管消息正在成功发送。
不起作用的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
此外,这是工作的
客户端代码。
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();
答案 0 :(得分:3)
C ++代码正在发送 UDP 消息。有关演示,请参阅here。
问题可能是服务器期望 TCP 连接,并且不会接收使用不同传输协议的数据。 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();
}