當前位置:首頁 » 網頁前端 » c實現簡單web伺服器
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c實現簡單web伺服器

發布時間: 2023-07-28 17:20:52

A. C++實現webservice

1 C++當然可以實現webservice,這是毋庸置疑的.axis2你知道嗎?本質是運行在tomcat下的一個servlet,分java版本,和c語言版本.官方網站為:http://axis.apache.org/,首頁上寫著:
The well known Apache Axis, and the the second generation of it, the Apache Axis2, are two Web Service containers that helps users to create, deploy, and run Web Services.
Axis2 is avaialble in both Java as well as C, languages and details about each version can be found below. 大概意思就是這東西分java版本和C版本,可以方便用戶創建,部署,運行web service.而C++完全是兼容C的.
2 當然需要伺服器,可能要實現某個服務吧,至於怎樣為其他平台服務,主要是監聽埠實現解析http協議.
3 你的問題有問題,js不需要拼串成XML,伺服器才要拼串,JS是運行在客戶端的,客戶端也不是通過SOAP與服務端進行通訊的,而是根據需要調用的服務的WSDL,提供對應參數,客戶端與服務端的通訊是用http協議的,而通訊方式根據是GET還是POST把相關參數放到HTTP頭或者體中.而web service之間的通訊才可能用得到SOAP.
4 PHP調用web service是非常簡單的,貌似有個函數通過SOAP調用.C++編寫的web service肯定有WSDL,可以根據WSDL描述的埠參數,來調用.
PS1:我沒有做過C++的Web service,只做過java的,但是所有語言都是相同的,基本原理都是一樣的,另外web service最好的做法是對外隱藏的,不能直接調用,應該有個類似調度中心的存在來負責調用,這是一個設計方式. 當然直接調用也是可以的,但這種方式效率不高.
PS2:C++可以做web service,但不是很好,缺乏技術支持,軟體支持,雖然管道過濾器模型不限制過濾器的實現方式,但怎麼說呢,C++就是不適合,畢竟和其他構件存在配合問題,而且開發成本也會相對要高點. 現在主流的是C#和JAVA.

B. 如何用C語言開發一個通用web伺服器

用C語言開發WEB,可以用C++BUILDER6,稱ISAPI,一般人可能做不起來,有點麻煩;
唯一是速度很快,別人看不到源碼,掌握了編程套路,也可以開發應用;
缺點:
1。不是解釋性語言,做的WEB調試非常麻煩;現在做WEB開發的,用C#、JAVA較多;都是解釋性的語言;
2。因為是.DLL的二進制代碼,一般商業網站不給予運行的環境,因為網站伺服器會被你可能搞癱,安全性得不到保障;所以,你得自備網頁伺服器;
3。得不到技術支持,因為沒幾個人會這種開發;

C. 如何用c編寫網頁,使網頁具有發送數據以及接收數據

網頁發送數據接受數據間件職責

用C寫網頁編譯exe文件修改cgi.

其輸入輸都根據標准輸入輸完LZ想用虛擬主機執行C語言編寫CGI行CGI許可權太執行任何操作所買虛擬主機肯定支持C語言編寫CGI

CGI介面標准包括標准輸入、環境變數、標准輸三部
1.標准輸入
CGI程序像其執行程序,通標准輸入(stdin)Web伺服器輸入信息,Form數據,所謂向CGI程序傳遞數據POST意味著操作系統命令行狀態執行CGI程序,CGI程序進行調試POST用,本文例,析CGI程序設計、程技巧

2.環境變數
操作系統提供許環境變數,定義程序執行環境,應用程序存取Web伺服器CGI介面另外設置自些環境變數,用向CGI程序傳遞些重要參數CGIGET通 環境變數QUERY-STRING向CGI程序傳遞Form數據

3.標准輸
CGI程序通標准輸(stdout)輸信息傳送給Web伺服器傳送給Web伺服器信息用各種格式,通純文本或者HTML文本形式,我命令行狀態調試CGI程序,並且輸

面簡單CGI程序,HTMLForm信息直接輸We b瀏覽器
# include <stdio.h>
# include <stdib.h>
main()
{
int i , n ;
printf (〃Content type: text/plain\n\n〃);
n=0;
if(getenv(〃CONTENT-LENGTH〃))
n=atoi(getenv(CONTENT-LENGTH〃));
for (i=0;i<n;i++)
putchar(getchar());
putchar (′\n′);
fflush(stdout);
}

面程序作簡要析
prinft (〃Content type :text/plain\n\n〃);
行通標准輸字元串〃Content type :text/plain\n\n〃傳送給Web伺服器MIME信息,告訴Web伺服器隨輸純ASCII文本形式請注意信息兩新行符,Web伺服器需要實際文本信息始前先看見空行
if (getenv(〃CONTENT-LENGTH〃))
n=atoi (getenv(〃CONTENT-LENGTH〃));
行首先檢查環境變數CONTENT-LENGTH否存Web伺服器調用使用POSTCGI程序設置環境變數,文本值表示Web 伺服器傳送給CGI程序輸入字元數目,我使用函數atoi() 環境變數值轉換整數,並賦給變數n請注意Web伺服器並文件結束符終止輸,所檢查環境變數CONTENT-LENGTH, CGI程序知道候輸入結束

for (i=0;i<n;i++)
putchar(getchar());
行0循環(CONTENT-LENGTH-1)標准輸入讀每字元直接拷貝標准輸,所輸入ASCII形式送給Web伺服器
通例,我CGI程序般工作程總結幾點
1.通檢查環境變數CONTENT-LENGTH,確定少輸入;
2.循環使用getchar()或者其文件讀函數所輸入;
3.相應處理輸入;
4.通〃Contenttype:〃信息,輸信息格式告訴Web伺服器;
5.通使用printf()或者putchar()或者其文件寫函數,輸傳送給Web伺服器
總,CGI程序主要任務Web伺服器輸入信息,進行處理,輸結再送給Web伺服器

D. 如何用c語言實現基於http的webservice

package com.yun.test;
import java.rmi.RemoteException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.message.PrefixedQName;
import org.apache.axis.message.SOAPHeaderElement;
import com.cezanne.golden.user.Exception;
import com.cezanne.golden.user.UserManagerServiceProxy;
import javax.xml.namespace.QName;
import java.net.MalformedURLException;
import javax.xml.rpc.ServiceException;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPException;
public class testWebService {
public static String getResult() throws ServiceException, MalformedURLException, RemoteException, SOAPException
{
//標識Web Service的具體路徑
String endpoint = "WebService服務地址";
// 創建 Service實例
Service service = new Service();
// 通過Service實例創建Call的實例
Call call = (Call) service.createCall();
//將Web Service的服務路徑加入到call實例之中.
call.setTargetEndpointAddress( new java.net.URL(endpoint) );//為Call設置服務的位置
// 由於需要認證,故需要設置調用的SOAP頭信息。
Name headerName = new PrefixedQName( new QName("發布的wsdl里的targetNamespace里的url", "string_itemName") );
org.apache.axis.message.SOAPHeaderElement header = new SOAPHeaderElement(headerName);
header.addTextNode( "blablabla" );
call.addHeader(header);

// SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("發布的wsdl里的targetNamespace里的url", "SoapHeader");
// soapHeaderElement.setNamespaceURI("發布的wsdl里的targetNamespace里的url");
// try
// {
// soapHeaderElement.addChildElement("string_itemName").setValue("blablabla");
// }
// catch (SOAPException e)
// {
// e.printStackTrace();
// }
// call.addHeader(soapHeaderElement);
//調用Web Service的方法
org.apache.axis.description.OperationDesc oper;
org.apache.axis.description.ParameterDesc param;
oper = new org.apache.axis.description.OperationDesc();
oper.setName("opName");
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg0"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg1"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg2"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
oper.setReturnType(new javax.xml.namespace.QName(", "string"));
oper.setReturnClass(java.lang.String.class);
oper.setReturnQName(new javax.xml.namespace.QName("", "return"));
oper.setStyle(org.apache.axis.constants.Style.WRAPPED);
oper.setUse(org.apache.axis.constants.Use.LITERAL);
oper.addFault(new org.apache.axis.description.FaultDesc(
new javax.xml.namespace.QName("發布的wsdl里的targetNamespace里的url", "Exception"),
"Exception",
new javax.xml.namespace.QName("發布的wsdl里的targetNamespace里的url", "Exception"),
true
));
call.setOperation( oper );
call.setOperationName(new javax.xml.namespace.QName("發布的wsdl里的targetNamespace里的url", "opName"));
//調用Web Service,傳入參數
String res = ( String ) call.invoke( new Object[]("arg0","arg1"));
System.out.println("===============");
return res;
}
/**
* @param args
*/
public static void main(String[] args) {
try {
System.out.println(getResult());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
} catch (SOAPException e) {
e.printStackTrace();
}
}
}

E. c語言可以用於製作網頁嗎

1、c語言是偏底層的語言,用來做界面的話是比較困難的
2、現在的靜態網頁設計一般使用Html+CSS,是比較基礎的東西,而且很容易上手,但也是必須掌握的。
3、現在主流的網站開發就是Java Web和asp.net。
如果你有java基礎可以走Java web的方向。可以用JSP+Servlet+Dao模式就能開發網站,當然SSH框架更加深奧。
而asp.net由於是微軟自己開發的軟體能很好的在windows平台上運行,用的是C#語言其實也和C語言差不多,因為語言是相通的,你學過一門語言後你就會有那種編程的思想。
asp.net是.NET FrameWork的一部分,是一項微軟公司的技術,是一種使嵌入網頁中的腳本可由網際網路伺服器執行的伺服器端腳本技術,它可以在通過HTTP請求文檔時再在Web伺服器上動態創建它們。 指 Active Server Pages(動態伺服器頁面) ,運行於 IIS(Internet Information Server 服務,是Windows開發的Web伺服器)之中的程序 。
4、另外,在進行網站開發時為了提高容錯能力,腳本語言是必不可少的,所以javascript或
php也是要懂一點點

F. 有沒有用C或c++寫的web伺服器

C++單獨作為應用服務的伺服器較少,http伺服器有一些的。比如IIS、apache、nginx,d都是基於C/C++的web伺服器,國產的有數蠶web伺服器,完全使用C++,基於Linux epoll模型。
如果C++服務端要求簡單,可以直接基於socket編寫。如果通信場景復雜,建議使用成熟的C++網路庫,如POCO、cpp-net、boost-asio、數蠶網路通信庫。

G. 如何用C++實現支持HTTPS的RESTful WebServer

webservice在企業應用中常常被用作不同系統之間的介面方式。但是如果沒有任何安全機制的話,顯然是難以委以重任的。比較直接的webservice加密方式就是使用HTTPS方式(SSL證書加密)加密連接,並且只允許持有信任證書的客戶端連接,即SSL雙向認證。這樣就保證了連接來源的可信度以及數據在傳輸過程中沒有被竊取或篡改。通過HTTPS加密方式訪問webservice具體方法如下:【准備工作】(1)檢查JDK的環境變數是否正確。本文使用JDK1.6(2)准備web伺服器,這里選用TOMCAT6.0(3)准備webservice服務端和客戶端。【生成證書】這里用到的文件,這里存放在D:/SSL/文件夾內,其中D:/SSL/server/內的文件是要交給伺服器用的,D:/SSL/client/內的文件是要交給客戶端用的。1生成服務端證書開始-運行-CMD-在dos窗口執行下執行命令:keytool-genkey-v-aliastomcat-keyalgRSA-keystoreD:/SSL/server/tomcat.keystore-dname"CN=127.0.0.1,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN"-validity3650-storepasszljzlj-keypasszljzlj說明:keytool是JDK提供的證書生成工具,所有參數的用法參見keytool–help-genkey創建新證書-v詳細信息-aliastomcat以」tomcat」作為該證書的別名。這里可以根據需要修改-keyalgRSA指定演算法-keystoreD:/SSL/server/tomcat.keystore保存路徑及文件名-dname"CN=127.0.0.1,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN"證書發行者身份,這里的CN要與發布後的訪問域名一致。但由於這里是自簽證書,如果在瀏覽器訪問,仍然會有警告提示。真正場景中建議申請CA機構(wosign)簽發的SSL證書更安全。-validity3650證書有效期,單位為天-storepasszljzlj證書的存取密碼-keypasszljzlj證書的私鑰2生成客戶端證書執行命令:keytool‐genkey‐v‐aliasclient‐keyalgRSA‐storetypePKCS12‐keystoreD:/SSL/client/client.p12‐dname"CN=client,OU=zlj,O=zlj,L=bj,ST=bj,C=CN"‐validity3650‐storepassclient‐keypassclient說明:參數說明同上。這里的-dname證書發行者身份可以和前面不同,到目前為止,這2個證書可以沒有任何關系。下面要做的工作才是建立2者之間的信任關系。3導出客戶端證書執行命令:keytool‐export‐aliasclient‐keystoreD:/SSL/client/client.p12‐storetypePKCS12‐storepassclient‐rfc‐fileD:/SSL/client/client.cer說明:-export執行導出-file導出文件的文件路徑4把客戶端證書加入服務端證書信任列表執行命令:keytool‐import‐aliasclient‐v‐fileD:/SSL/client/client.cer‐keystoreD:/SSL/server/tomcat.keystore‐storepasszljzl說明:參數說明同前。這里提供的密碼是服務端證書的存取密碼。5導出服務端證書執行命令:keytool-export-aliastomcat-keystoreD:/SSL/server/tomcat.keystore-storepasszljzlj-rfc-fileD:/SSL/server/tomcat.cer說明:把服務端證書導出。這里提供的密碼也是服務端證書的密碼。6生成客戶端信任列表執行命令:keytool-import-fileD:/SSL/server/tomcat.cer-storepasszljzlj-keystoreD:/SSL/client/client.truststore-aliastomcat–noprompt說明:讓客戶端信任服務端證書【配置服務端為只允許HTTPS連接】1配置Tomcat目錄下的/conf/server.xmlXml代碼:說明:在server.xml裡面這段內容本來是被注釋掉的,如果想使用https的默認埠443,請修改這里的port參數。其中的clientAuth="true"指定了雙向證書認證。2配置服務端項目web.xml在之後增加Xml代碼:SSL/service/*/*-->SSLrequiredCONFIDENTIAL說明:這里限制了WEBservice服務地址的訪問必須為https連接。要根據你的webservice服務地址配置。【修改客戶端代碼】在執行訪問之前,增加Java代碼:System.setProperty("javax.net.ssl.trustStore","D:/SSL/client/client.truststore");System.setProperty("javax.net.ssl.trustStorePassword","zljzlj");System.setProperty("javax.net.ssl.keyStoreType","PKCS12");System.setProperty("javax.net.ssl.keyStore","D:/SSL/client/client.p12");System.setProperty("javax.net.ssl.keyStorePassword","client");StringendPoint="ApplyFormService";通過設置參數來指定客戶端連接時所使用的客戶端證書,這里還可以採用修改JVM啟動參數的的方式來執行,但出於不影響其他功能的考慮,這里採用System.setProperty的方式來設置這些參數,在使用結束後,可以還原這些參數配置。做為客戶端的開發者,可以把拿到的證書文件後,只執行步驟3。