2015-08-28 51 views
0

我試圖在本地計算機上實現服務器 - 客戶端關係。我有一個java程序作爲服務器,它監聽端口4567.我有一個java程序作爲客戶端,它打開一個連接到127.0.0.1:4567併發送消息。在服務器端口上未收到UDP消息

這一切正常,正在收到消息。

問題

我實現了在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(); 
+0

你需要有一個 – ChrisWard1000

+0

io_service.run()我在哪裏地方打電話? –

+0

@ ChrisWard1000同步操作不需要'io_service.run()'。 –

回答

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

謝謝。我從一開始就打算只使用UDP協議。我將服務器實現切換到DatagramSocket,它工作。 –

相關問題