2011-02-16 168 views
0

我必须发送一个HTTP请求到我们在Linux机器上运行的C程序。我怎样才能用Java发送一个HTTP请求到我们的服务器,这个服务器是用C语言在Linux机器上运行的?发送http请求到linux服务器

+2

写入服务器的语言和运行的操作系统都与此问题无关。 – 2011-02-16 05:06:46

+0

可能重复的[如何在Java中发送HTTP请求?](http://stackoverflow.com/questions/1359689/how-to-send-http-request-in-java) – 2011-02-16 05:08:25

回答

0

如果您要问如何用Java发送HTTP请求到用C编写的Web服务器,您可以使用URLConnection类。

+0

谢谢,但如果你给我一些完整的例如,那对我来说会更容易。我需要更多的澄清。 – user556761 2011-02-16 04:30:51

0
try { 
// Construct data 
String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8"); 
data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8"); 

// Send data 
URL url = new URL("http://hostname:80/cgi"); 
URLConnection conn = url.openConnection(); 
conn.setDoOutput(true); 
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
wr.write(data); 
wr.flush(); 

// Get the response 
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
String line; 
while ((line = rd.readLine()) != null) { 
    // Process line... 
} 
wr.close(); 
rd.close(); } catch (Exception e) { } 

以上示例是使用URL发送POST请求的。 也请看Sun Tutorial阅读/写作URLConnection。另一个选项是使用Apache HTTPComponents,其中有HttpCoreHttpClient模块的示例。 如果你正在考虑实现web服务器,你将不得不处理Http请求,这涉及到一个线程池,解析请求,生成HTML,安全性,多个会话等,或者通过使用off-the-像Apache这样的架构网络服务器,并查看Perl,Ruby等所有高级语言可用于开发Web应用程序。 为了实现你自己的Http服务器,请看看Micro-HttpdtinyHttpd 你也可以看看Adding Web Interface -C++ application,它有一个示例代码。

1
public void sendPostRequest() { 

    //Build parameter string 
    String data = "width=50&height=100"; 
    try { 

     // Send the request 
     URL url = new URL("http://www.somesite.com"); 
     URLConnection conn = url.openConnection(); 
     conn.setDoOutput(true); 
     OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream()); 

     //write parameters 
     writer.write(data); 
     writer.flush(); 

     // Get the response 
     StringBuffer answer = new StringBuffer(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     String line; 
     while ((line = reader.readLine()) != null) { 
      answer.append(line); 
     } 
     writer.close(); 
     reader.close(); 

     //Output the response 
     System.out.println(answer.toString()); 

    } catch (MalformedURLException ex) { 
     ex.printStackTrace(); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
} 

以上示例是使用URL发送POST请求的。

0

从你的问题措辞的方式。我认为你需要知道一些基本的东西,然后才能开始。尝试尝试使用Google搜索简单指南了解Web服务器的工作方式。

一旦你的基本思路,有一对夫妇的一个C程序员选择:

1)你想你的C程序中连续运行,等待您的Java请求。

在这种情况下,您将不得不编写您的C程序来打开套接字并侦听连接。例如,请参见http://www.linuxhowtos.org/C_C++/socket.htm

OR

2)你有你的服务器将特定的请求时,每次运行你的C程序上的Web服务器?在这种情况下,您将不得不将您的C编码为CGI程序。例如,请参见http://www.cs.tut.fi/~jkorpela/forms/cgic.html。提示:(2)要容易得多!