如何用c语言实现http服务器

Python012

如何用c语言实现http服务器,第1张

去看一下《Advanced Linux Programming》这本书吧,第11章讲的就是怎么用C语言实现一Http服务器。 这里有下载地址(英文的): http://www.advancedlinuxprogramming.com/alp-folder 英文看起来不顺的话可以上网找找有没有中文版的这本书,应该叫Linux高级编程吧~~~参考资料: http://www.advancedlinuxprogramming.com/alp-folder

package com.yudun.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()

}

}

}