2010-11-30 35 views
0

我需要一個客戶端發送一個http請求消息到服務器,但我不知道如何在UDP中使用http 1.1編程客戶端發送一個HTTP請求消息到一個服務器與Java連接的UDP連接

它需要在方法字段中具有特定的詞,url字段中的特定名稱和版本字段中的特定整數。

因此,如果我想發送一個http請求消息,在方法字段中有「inform」,url字段中的「host1」和版本字段中的40000,我該怎麼做?

這是我現在擁有但它不使用http,我不知道如何改變它。

BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); 
     DatagramSocket clientSocket = new DatagramSocket(); 
     InetAddress IPAddress = InetAddress.getByName("THIS-PC"); 
     byte[] sendData = new byte[128]; 
     byte[] receiveData = new byte[128]; 
     System.out.println("Enter:"); 
     String request ="INFORM "; 
     String sentence = inFromUser.readLine(); 
     // request.concat("/r/n"); 
     request.concat(sentence); 
     // request.concat("/r/n"); 
     sendData = sentence.getBytes(); 
     DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 40075); 

     clientSocket.send(sendPacket); 
     System.out.println("Packet sent"); 
     DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 

     clientSocket.receive(receivePacket); 
     System.out.println("Packet received"); 
     String reply = new String(receivePacket.getData()); 

      System.out.println("FROM SERVER:" + reply); 
      clientSocket.close(); 
+2

你真的*想通過UDP發送HTTP嗎?或者你只是想使用HTTP標準方式(通過TCP/IP)? – BalusC 2010-11-30 23:45:27

回答

0

(a)您需要一個支持UDP的HTTP服務器。你真的有嗎?

(b)您需要在此客戶端代碼中實現HTTP協議。我沒有看到任何嘗試這樣做。你所做的只是發送直接從控制檯讀取的行。根本沒有HTTP。

1

你必須實現IEEE RFC的HTTP協議?或者只是一個模擬UDP?

HTTP是基於文本傳輸的協議,可以在TCP/IP上運行。 HTTP默認端口爲80,但您可以通過該端口運行數據報服務。

丟失TCP/IP的一些特殊和有用的方法,例如傳遞保證,命令和正確的序列化。你真的必須這樣做嗎?

即使這樣做,您還需要編寫一個使用UDP監聽該端口的「服務」,所有Web服務器都與TCP協同工作,因爲這是默認的並在RFC中指定。

而且,閱讀本作的詳細信息有關:

http://www.w3.org/Protocols/rfc2616/rfc2616.html

或者,如果你只是想要一個簡單的應用程序,通過UDP發送和接收的數據有關於如何做到這一點在網絡上的幾個例子。

對不起,如果這沒有幫助。

相關問題