簡體   English   中英

服務器端口未收到UDP消息

[英]UDP message not being received on server port

我試圖在我的本地計算機上實現服務器-客戶端關系。

我有一個充當服務器的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

另外,這里是工作的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通信。

這是演示的等效TCP客戶端:

#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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM