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

如何用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()

}

}

}

OK

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/ip.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <stdio.h>

#include <stdlib.h>

#include <strings.h>

#include <unistd.h>

#include <string.h>

int main(int argc,char *argv[])

{

int sockfd,new_socket

int sock_value

char buf[] = "hello! China!I Love You\n"

struct sockaddr_in client_

struct sockaddr_in server_

int SIZE = sizeof(struct sockaddr_in)

if(argc != 2){

fprintf(stderr,"The two number!\n")

exit(1)

}

if((sock_value = atoi(argv[1])) <0){

fprintf(stderr,"socket error!\n")

exit(1)

}

if((sockfd = socket(PF_INET,SOCK_STREAM, 0)) == -1){

perror("socket")

exit(1)

}

bzero(&server_,SIZE)

server_.sin_family = PF_INET

server_.sin_port = htons(sock_value)

server_.sin_addr.s_addr = INADDR_ANY

if(bind(sockfd,(struct sockaddr *)(&server_),SIZE) == -1){

perror("bind")

exit(1)

}

if(listen(sockfd, 12) == -1){

perror("listen")

exit(1)

}

printf("Waiting ... ...\n")

while(1){

if((new_socket = accept(sockfd,(struct sockaddr *)(&client_),&SIZE)) == -1){

perror("accept")

exit(1)

}

printf("The client IP is %s\n",inet_ntoa(client_.sin_addr))

printf("The socket is %d\n",ntohs(client_.sin_port))

if(write(new_socket,buf,strlen(buf)) == -1){

perror("write")

exit(1)

}

int my

char mybuf[1024]

if((my = read(new_socket, mybuf,1024)) == -1){

perror("read")

exit(1)

}

mybuf[my] = '\0'

printf("#++++#++++#:%s\n",mybuf)

close(new_socket)

}

close(sockfd)

return 0

}

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/ip.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <stdio.h>

#include <stdlib.h>

#include <strings.h>

#include <unistd.h>

int main(int argc,char *argv[])

{

int sockfd

int sock_value

char buf[1024]

char mybuf[] = "Linux\n"

int read_count

struct sockaddr_in client_

struct sockaddr_in server_

int SIZE = sizeof(struct sockaddr_in)

if(argc != 3){

fprintf(stderr,"The two number!\n")

exit(1)

}

if((sock_value = atoi(argv[2])) <0){

fprintf(stderr,"socket error!\n")

exit(1)

}

if((sockfd = socket(PF_INET,SOCK_STREAM, 0)) == -1){

perror("socket")

exit(1)

}

bzero(&client_,SIZE)

bzero(&server_,SIZE)

client_.sin_family = PF_INET

client_.sin_port = htons(52252)

client_.sin_addr.s_addr = INADDR_ANY

server_.sin_family = PF_INET

server_.sin_port = htons(sock_value)

server_.sin_addr.s_addr = inet_addr(argv[1])

if(connect(sockfd,(struct sockaddr *)(&server_),SIZE) == -1){

perror("connect")

exit(1)

}

if((read_count = read(sockfd,buf,1024)) == -1){

perror("read")

exit(1)

}

buf[read_count] = '\0'

printf("#----#----#:%s\n",buf)

if(write(sockfd, mybuf,6) == -1){

perror("write")

exit(1)

}

close(sockfd)

exit(0)

return 0

}


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/220090.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存