簡體   English   中英

將Java數據包發送到Python服務器?

[英]Sending Java Packets to Python Server?

我剛剛開始學習發送UDP數據包,而且我遇到了一個問題。 我編寫了一個Java客戶端和服務器,可以輕松地相互通信,我已經完成了Python客戶端/服務器組合,但我不確定如何從Java發送UDP數據包並在Python中接收它。 這就是我對Java客戶端的看法:

import java.io.*;
import java.net.*;

public class testclient {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket();

        byte[] buf = new byte[256];
        InetAddress address = InetAddress.getLocalHost();
        DatagramPacket packet = new DatagramPacket(buf, buf.length, address, Integer.parseInt(args[0]));

        System.out.println("Sending...");
        socket.send(packet);

        System.out.println("Receiving...");
        packet = new DatagramPacket(buf, buf.length);
        socket.receive(packet);

        String received = new String(packet.getData(), 0, packet.getLength());
        System.out.println(received);
        System.out.println("Done!");

        socket.close();
    }
}

和Python服務器:

from sys import *
from socket import *

host = gethostname()
port = int(argv[1])
address = (host, port)

print "Binding..."
sock = socket(AF_INET, SOCK_DGRAM)
sock.bind(address)

print "Receiving..."
data, client = sock.recvfrom(256)

print "Sending to", client
sock.sendto("Hi", client)

print "Closing..."
sock.close()

print "Done!"

我在這里嘗試的只是從Java客戶端向Python服務器發送請求,然后讓Python服務器將“Hi”發送回Java客戶端,並讓客戶端打印字符串。 對我來說發生的是客戶端發送數據包,服務器等待sock.recvfrom(256)並且從不接收數據包(或者它看起來像是什么樣的)。

有任何想法嗎? 我猜測Java和Python處理數據包的方式有些不同,但我不確定。

編輯:只是為了澄清,端口號是通過這兩個應用程序的命令行參數傳遞的。

問題必須在你的代碼中,他們應該能夠進行通信: 是在java中編寫客戶端服務器對的一個很好的例子。

所以,首先,我在Ubuntu 10.10上。

我進入/ etc / hosts,看起來127.0.0.1被分配給localhost.localdomain,而127.0.1.1被分配給我的機器名。 因此,Python使用的是localhost地址,而Java則使用我的機器名稱地址。 我將localhost更改為我的機器名稱,現在一切正常。

謝謝大家幫忙!

在Java中,我看到了創建數據包的位置,但在發送數據包之前,我沒有看到您實際使用setData將任何數據放入數據包。

暫無
暫無

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

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