C语言怎样写代理服务器,能实现GET请求和CONNECT请求

C语言怎样写代理服务器,能实现GET请求和CONNECT请求,第1张

你先研究一下HTTP协议和socket编程吧,不是一两个函数就能说清楚的,尤其HTTP协议,还是很复杂的,协议说明就几百页。。。。。相连接第一步是用socket 连接对方的某端口,需要先通过域名找到地址,然后用socket连接对方 80端口,成功后你就可以发送符合HTTP协议的请求了。。。http协议头第一行就应该写你在浏览器地址栏里写的东西,包括get参数,后面是其他字段,比如你希望接受什么内容,使用的字符集等等。。。。get和FORM最大区别就是,get是连同地址域名一起发送的,所以你会在地址栏看到他,form则是有专门的字段来描述,你是看不到的,但get简单,在浏览器地址栏上你就可以手动输入参数,不需要使用form控件提交。。。

如果你有C++的编程背景,那这个问题就很简单了:C#中的delegate和C++中的函数指针基本是一回事,C#正是以delegate的形式实现了函数指针。不同的地方在于C#中delegate是类型安全的。

如果没有C或者C++的背景知识也没有一点关系。

要理解Delegate,首先,你要明白,它是一个类,他和Class是一个级别的概念,不同在于Class的定义包含字段和方法,而delegate只包含方法的细节。

定义Delegate:

public delegate bool CompareDelegate(int a, int b)

上面语句的含义是:定义了一个委托的实例时,这些实例都要包含一个方法名,并且这个方法必须有两个int型的参数,并且必须返回一个bool型的值。

好,现在就创建一个上面定义的委托的实例

public CompareDelegate myCompare = new CompareDelegate(CompareMethod)

里面的这个CompareMethod是一个方法:

定义如下:

public static bool CompareMethod(int x , int y)

{

bool result = x >y ? true : false

return result

}

怎么使用呢

int a = 10

int b = 15

bool isBigger = myDelegate(a, b)

下面是完整的代码:

using System

using System.Collections.Generic

using System.Text

using Common

namespace ConsoleApplication8

{

//定义委托

public delegate bool CompareDelegate(int a, int b)

public class MyCompare

{

/// <summary>

/// 定义一个方法,符合上面定义的委托所要求的方法细节,返回值为bool型,两个参数分别为int型

/// </summary>

/// <param name="x"></param>

/// <param name="y"></param>

/// <returns></returns>

public static bool CompareMethod(int x , int y)

{

bool result = x >y ? true : false

return result

}

}

class Program

{

static void Main(string[] args)

{

//实例化委托并初始化。注意初始化时候,必须包含一个方法的名称,而且这个方法必须符合最初定义委托时候的签名(参数类型和返回值)

CompareDelegate myDelegate = new CompareDelegate(MyCompare.CompareMethod)

//现在我们使用委托实例来比较两个数a和b的的大小

int a = 10

int b = 15

bool isBigger = myDelegate(a, b)

Console.WriteLine(" a >b ?: " + isBigger)

Console.Read()

}

}

}

是不是太简单了。

C#中委托用来干什么呢,当然不是用来实现象上面那样的弱智程序。在C#中一提委托,一般就会引出另外一个术语:事件。C#中事件的实现,正是依赖于delegate。而事件又是一个很重要的概念,只有真正理解了委托,才能打好基础,真正的弄明白事件。

希望有帮助

没有函数可以做这个,你要自己把客户发给你的URL中的命令(GET。。)HOST NAME, PORT NAME, HTTP/1.1OR1.0 还有PATH找出来,然后和服务器建立连接,再把header 改编发给服务器,具体的格式可以用wireshark看,然后接受服务器返回给你的包,原封不动再返回给client


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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存