?? proxyhttp.cs
字號(hào):
?using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.IO;
/// <summary>
/// ProxyHttp 的摘要說(shuō)明
/// </summary>
public class ProxyHttp
{
Socket clientSocket;
Byte[] read = new byte[1024];
//定義一個(gè)空間,存儲(chǔ)來(lái)自客戶(hù)端請(qǐng)求數(shù)據(jù)包
Byte[] Buffer = null;
Encoding ASCII = Encoding.ASCII;
//設(shè)定編碼
Byte[] RecvBytes = new Byte[4096];
//定義一個(gè)空間,存儲(chǔ)Web服務(wù)器返回的數(shù)據(jù)
String clientmsg;
public ProxyHttp(Socket socket)
{
//
// TODO: 在此處添加構(gòu)造函數(shù)邏輯
//
this.clientSocket = socket;
}
public void Run()
{
string clientmessage = "";
//存放來(lái)自客戶(hù)端的HTTP請(qǐng)求字符串
string URL = "";
//存放解析出地址請(qǐng)求信息
int bytes = ReadMessage(read, ref clientSocket, ref clientmessage);
if (bytes == 0)
{
return;
}
clientmsg = clientmessage;
int index1 = clientmessage.IndexOf(' ');
int index2 = clientmessage.IndexOf(' ', index1 + 1);
if ((index1 == -1) || (index2 == -1))
{
throw new IOException();
}
string part1 = clientmessage.Substring(index1 + 1, index2 - index1);
int index3 = part1.IndexOf('/', index1 + 8);
int index4 = part1.IndexOf(' ', index1 + 8);
int index5 = index4 - index3;
URL = part1.Substring(index1 + 4, (part1.Length - index5) - 8);
try
{
IPHostEntry IPHost = Dns.Resolve(URL);
Console.WriteLine("遠(yuǎn)程主機(jī)名: " + IPHost.HostName);
string[] aliases = IPHost.Aliases;
IPAddress[] address = IPHost.AddressList;
Console.WriteLine("Web服務(wù)器IP地址:" + address[0]);
//解析出要訪問(wèn)的服務(wù)器地址
IPEndPoint ipEndpoint = new IPEndPoint(address[0], 80);
Socket IPsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//創(chuàng)建連接Web服務(wù)器端的Socket對(duì)象
IPsocket.Connect(ipEndpoint);
//Socket連Web接服務(wù)器
if (IPsocket.Connected)
Console.WriteLine("Socket 正確連接!");
string GET = clientmessage;
Byte[] ByteGet = ASCII.GetBytes(GET);
IPsocket.Send(ByteGet, ByteGet.Length, 0);
//代理訪問(wèn)軟件對(duì)服務(wù)器端傳送HTTP請(qǐng)求命令
Int32 rBytes = IPsocket.Receive(RecvBytes, RecvBytes.Length, 0);
//代理訪問(wèn)軟件接收來(lái)自Web服務(wù)器端的反饋信息
Console.WriteLine("接收字節(jié)數(shù):" + rBytes.ToString());
String strRetPage = null;
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, rBytes);
while (rBytes > 0)
{
rBytes = IPsocket.Receive(RecvBytes, RecvBytes.Length, 0);
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, rBytes);
}
IPsocket.Shutdown(SocketShutdown.Both);
IPsocket.Close();
SendMessage(clientSocket, strRetPage);
//代理服務(wù)軟件往客戶(hù)端傳送接收到的信息
}
catch (Exception exc2)
{
Console.WriteLine(exc2.ToString());
}
}
//接收客戶(hù)端的HTTP請(qǐng)求數(shù)據(jù)
private int ReadMessage(byte[] ByteArray, ref Socket s, ref String clientmessage)
{
int bytes = s.Receive(ByteArray, 1024, 0);
string messagefromclient = Encoding.ASCII.GetString(ByteArray);
clientmessage = (String)messagefromclient;
return bytes;
}
//傳送從Web服務(wù)器反饋的數(shù)據(jù)到客戶(hù)端
private void SendMessage(Socket s, string message)
{
Buffer = new Byte[message.Length + 1];
int length = ASCII.GetBytes(message, 0, message.Length, Buffer, 0);
Console.WriteLine("傳送字節(jié)數(shù):" + length.ToString());
s.Send(Buffer, length, 0);
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -