Tôi phải gửi gói UDP và nhận phản hồi từ máy chủ UDP. Tôi mặc dù UDP là tương tự với một java.net.DatagramPacket trong Java, nhưng các tài liệu cho DatagramPacket có vẻ là bạn gửi một gói nhưng không nhận được bất cứ điều gì trở lại, là điều này đúng để sử dụng hoặc tôi nên sử dụng java. net.SocketCần gửi gói UDP và nhận phản hồi trong Java
Trả lời
Ví dụ về UDP datagram gửi và nhận (source):
import java.io.*;
import java.net.*;
class UDPClient
{
public static void main(String args[]) throws Exception
{
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("localhost");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String modifiedSentence = new String(receivePacket.getData());
System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
}
}
Điều này có vẻ tốt, nhưng có vẻ như không có chiều dài gói được xác định cho máy chủ, nghĩa là tôi không nghĩ rằng độ dài gói của gói được trả về bởi máy chủ luôn giống nhau vì vậy tôi chỉ cần đảm bảo receiveData bộ đệm đủ lớn để xử lý kích thước gói lớn nhất có thể. –
Có. UDP là giao thức không đáng tin cậy, và hiếm khi được sử dụng để gửi các khối dữ liệu lớn trên nó. Tuy nhiên, sau khi nhận được gói tin, bạn có thể đọc số byte thực tế có trong 'DatagramPacket.getLength()'. – bezmax
'receivePacket.getData()' không chỉ chứa dữ liệu nhận được. Nó chứa phần không sử dụng của bộ đệm. Để có được một String với các dữ liệu nhận được sử dụng 'chuỗi mới (receivePacket.getData(), 0, receivePacket.getLength(), StandardCharsets.UTF_8)' và điều chỉnh bộ ký tự cho những gì bạn mong đợi. –
Bạn phải sử dụng DatagramPacket và DatagramSocket. Khi bạn gửi một gói tin, bạn chỉ cần gửi một gói tin. Tuy nhiên khi bạn nhận được một gói, bạn có thể nhận được một gói tin được gửi từ một chương trình khác (ví dụ các máy chủ trả lời)
http://docs.oracle.com/javase/7/docs/api/java/net/DatagramSocket.html
Ổ cắm duy nhất là cho các kết nối TCP.
Các tài liệu Java không bao gồm làm thế nào để viết một client và một server.
http://docs.oracle.com/javase/tutorial/networking/datagrams/clientServer.html
Bạn muốn nhìn vào DatagramSocket#receive
Đó là chính xác sự khác biệt giữa UDP và TCP socket.
UDP được phát, trong khi TCP với java.net.Socket là điểm đến điểm. UDP là lửa-và-quên, tương tự như xuất bản một tin nhắn trên một chủ đề JMS.
Xem: http://docs.oracle.com/javase/tutorial/networking/datagrams/index.html
UDP không được phát sóng. Phát sóng là một điều cấp IP. – OrangeDog
- 1. gửi và nhận gói UDP bằng Java?
- 2. Cách gửi yêu cầu HTTP POST và nhận phản hồi?
- 3. Gửi và nhận dữ liệu qua UDP trong PowerShell
- 4. Gửi gói UDP từ iPhone
- 5. Python Gửi biểu mẫu và nhận phản hồi
- 6. Gửi biểu mẫu và nhận phản hồi JSON với jQuery
- 7. Java: Nhận phản hồi HTTP nhiều phần
- 8. Phát UDP trong Java
- 9. Gửi yêu cầu POST mà không cần chờ phản hồi?
- 10. Gửi và nhận đối tượng tuần tự trên UDP
- 11. gửi gói tin UDP từ Kernel Linux
- 12. Java thả một nửa gói UDP
- 13. Nhận phản hồi của dòng lệnh trong Java
- 14. cách nhận phản hồi trong QtWebKit
- 15. Nhận tiêu đề phản hồi
- 16. Android không bao giờ nhận gói UDP
- 17. Nodejs gửi tệp theo phản hồi
- 18. Kích thước gói UDP và tổn thất gói
- 19. Hủy gói UDP đến mà không cần đọc
- 20. Gọi (và nhận phản hồi) Mã USSD, trong nền?
- 21. Codeigniter PHP JSON gửi phản hồi HTML
- 22. Cách nhận url phản hồi trong XMLHttpRequest?
- 23. Thử nhận phản hồi USSD trong android
- 24. Gửi phản hồi Json dưới dạng Chuỗi và Số nguyên ...
- 25. Cách gửi yêu cầu họp iCal bằng cách sử dụng Java Mail và nhận được phản hồi
- 26. Gửi phản hồi JSON bằng Scrapy
- 27. Java DatagramPacket (UDP) tối đa gửi/recv đệm kích thước
- 28. Sử dụng netcat để gửi gói UDP mà không cần ràng buộc
- 29. Nhận phản hồi từ PostAsJsonAsync
- 30. Gửi cấu trúc C++ qua UDP trong Java
UDP là datagram. Bạn không nhận được bất cứ điều gì trở lại trừ khi người nhận gửi một cái gì đó trở lại. Nó tương tự với một ổ cắm tcp. Nếu bạn nói với chúng tôi những gì bạn muốn làm, có thể? – Erik
Ok máy chủ đã tồn tại (không phải bằng văn bản của tôi) nó sẽ gửi một cái gì đó trở lại khi tôi gửi nó một gói nhưng làm thế nào để tôi nhận được các gói nó gửi trở lại? –
câu hỏi đầu tiên là: máy chủ có gửi lại udp không? Nếu vậy, bạn cần đọc từ ổ UDP của riêng bạn thông qua phương thức Datagram.receive(). – Erik