如何用C语言开发一个通用web服务器?

如何用C语言开发一个通用web服务器?,第1张

用C语言开发WEB,可以用C++BUILDER6,称ISAPI,一般人可能做不起来,有点麻烦;

唯一是速度很快,别人看不到源码,掌握了编程套路,也可以开发应用;

缺点:

1。不是解释性语言,做的WEB调试非常麻烦;现在做WEB开发的,用C#、JAVA较多;都是解释性的语言;

2。因为是.DLL的二进制代码,一般商业网站不给予运行的环境,因为网站服务器会被你可能搞瘫,安全性得不到保障;所以,你得自备网页服务器;

3。得不到技术支持,因为没几个人会这种开发;

这个应该比较困难

c语言的程序可以以文本文字的方式提交

然后用服务器端的CMD.EXE执行

没有实践过

你也可以参照一下那些后门程序是怎么写的

Java调用WebService可以直接使用Apache提供的axis.jar自己编写代码,或者利用Eclipse自动生成WebService Client代码,利用其中的Proxy类进行调用。理论上是一样的,只不过用Eclipse自动生成代码省事些。

1、编写代码方式:

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()

  }

    }

}

2、利用Eclipse自动生成WebService client代码就容易多了:

首先,new project,选择other,在输入框中输入Web Service Client,选中搜索后的结果,点击Next,在Service definition中输入 WebService的发布地址,点击Finish

这样,WebService Client代码已经生成好了。

接下来写一个Test类,在main函数中输入如下代码:

String endpoint = "服务器的WebService的地址"

 YourWebServiceNameProxy umsp = new YourWebServiceNameProxy (endpoint)

 try {

 String resultStr = umsp.opMethod("arg0","arg1")

 System.out.println(resultStr)

 } catch (Exception e) {

 System.out.println("异常")

 e.printStackTrace()

} catch (RemoteException e) {

 System.out.println("RemoteException异常")

 e.printStackTrace()

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12003376.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存