<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FC_Sharp%2FNetwork%2FWeb_Proxy_Server</id>
		<title>Csharp/C Sharp/Network/Web Proxy Server - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FC_Sharp%2FNetwork%2FWeb_Proxy_Server"/>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Network/Web_Proxy_Server&amp;action=history"/>
		<updated>2026-04-29T21:22:07Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/C_Sharp/Network/Web_Proxy_Server&amp;diff=1456&amp;oldid=prev</id>
		<title> в 15:31, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Network/Web_Proxy_Server&amp;diff=1456&amp;oldid=prev"/>
				<updated>2010-05-26T15:31:19Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 15:31, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/C_Sharp/Network/Web_Proxy_Server&amp;diff=1457&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Network/Web_Proxy_Server&amp;diff=1457&amp;oldid=prev"/>
				<updated>2010-05-26T11:46:06Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Implements a multi-threaded Web proxy server==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
C# Programming Tips &amp;amp; Techniques&lt;br /&gt;
by Charles Wright, Kris Jamsa&lt;br /&gt;
Publisher: Osborne/McGraw-Hill (December 28, 2001)&lt;br /&gt;
ISBN: 0072193794&lt;br /&gt;
*/&lt;br /&gt;
// Proxy.cs -- Implements a multi-threaded Web proxy server&lt;br /&gt;
//&lt;br /&gt;
//             Compile this program with the following command line:&lt;br /&gt;
//                 C:&amp;gt;csc Proxy.cs&lt;br /&gt;
using System;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using System.Net.Sockets;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.IO;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
namespace nsProxyServer&lt;br /&gt;
{&lt;br /&gt;
    public class ProxyServer&lt;br /&gt;
    {&lt;br /&gt;
        static public void Main (string [] args)&lt;br /&gt;
        {&lt;br /&gt;
            int Port = 3125;&lt;br /&gt;
            if (args.Length &amp;gt; 0)&lt;br /&gt;
            {&lt;br /&gt;
                try&lt;br /&gt;
                {&lt;br /&gt;
                    Port = Convert.ToInt32 (args[0]);&lt;br /&gt;
                }&lt;br /&gt;
                catch&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine (&amp;quot;Please enter a port number.&amp;quot;);&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                // Create a listener for the proxy port&lt;br /&gt;
                TcpListener sockServer = new TcpListener (Port);&lt;br /&gt;
                sockServer.Start ();&lt;br /&gt;
                while (true)&lt;br /&gt;
                {&lt;br /&gt;
                    // Accept connections on the proxy port.&lt;br /&gt;
                    Socket socket = sockServer.AcceptSocket ();&lt;br /&gt;
                    &lt;br /&gt;
                    // When AcceptSocket returns, it means there is a connection. Create&lt;br /&gt;
                    // an instance of the proxy server class and start a thread running.&lt;br /&gt;
                    clsProxyConnection proxy = new clsProxyConnection (socket);&lt;br /&gt;
                    Thread thrd = new Thread (new ThreadStart (proxy.Run));&lt;br /&gt;
                    thrd.Start ();&lt;br /&gt;
                    // While the thread is running, the main program thread will loop around&lt;br /&gt;
                    // and listen for the next connection request.&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (IOException e)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine (e.Message);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    class clsProxyConnection&lt;br /&gt;
    {&lt;br /&gt;
        public clsProxyConnection (Socket sockClient)&lt;br /&gt;
        {&lt;br /&gt;
            m_sockClient = sockClient;&lt;br /&gt;
        }&lt;br /&gt;
        Socket m_sockClient; //, m_sockServer;&lt;br /&gt;
        Byte [] readBuf = new Byte [1024];&lt;br /&gt;
        Byte [] buffer = null;&lt;br /&gt;
        Encoding ASCII = Encoding.ASCII;&lt;br /&gt;
        public void Run ()&lt;br /&gt;
        {&lt;br /&gt;
            string strFromClient = &amp;quot;&amp;quot;;&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                // Read the incoming text on the socket/&lt;br /&gt;
                int bytes = ReadMessage (m_sockClient,&lt;br /&gt;
                                         readBuf, ref strFromClient);&lt;br /&gt;
                // If it&amp;quot;s empty, it&amp;quot;s an error, so just return.&lt;br /&gt;
                // This will termiate the thread.&lt;br /&gt;
                if (bytes == 0)&lt;br /&gt;
                    return;&lt;br /&gt;
                // Get the URL for the connection. The client browser sends a GET command&lt;br /&gt;
                // followed by a space, then the URL, then and identifer for the HTTP version.&lt;br /&gt;
                // Extract the URL as the string betweeen the spaces.&lt;br /&gt;
                int index1 = strFromClient.IndexOf (&amp;quot; &amp;quot;);&lt;br /&gt;
                int index2 = strFromClient.IndexOf (&amp;quot; &amp;quot;, index1 + 1);&lt;br /&gt;
                string strClientConnection =&lt;br /&gt;
                      strFromClient.Substring (index1 + 1, index2 - index1);&lt;br /&gt;
                if ((index1 &amp;lt; 0) || (index2 &amp;lt; 0))&lt;br /&gt;
                {&lt;br /&gt;
                    throw (new IOException ());&lt;br /&gt;
                }&lt;br /&gt;
                // Write a messsage that we are connecting.&lt;br /&gt;
                Console.WriteLine (&amp;quot;Connecting to Site &amp;quot; +&lt;br /&gt;
                                   strClientConnection);&lt;br /&gt;
                Console.WriteLine (&amp;quot;Connection from &amp;quot; +&lt;br /&gt;
                                   m_sockClient.RemoteEndPoint);&lt;br /&gt;
                // Create a WebRequest object.&lt;br /&gt;
                WebRequest req = (WebRequest) WebRequest.Create&lt;br /&gt;
                                                     (strClientConnection);&lt;br /&gt;
                // Get the response from the Web site.&lt;br /&gt;
                WebResponse response = req.GetResponse ();&lt;br /&gt;
                int BytesRead = 0;&lt;br /&gt;
                Byte [] Buffer = new Byte[32];&lt;br /&gt;
                int BytesSent = 0;&lt;br /&gt;
                &lt;br /&gt;
                // Create a response stream object.&lt;br /&gt;
                Stream ResponseStream = response.GetResponseStream();&lt;br /&gt;
                &lt;br /&gt;
                // Read the response into a buffer.&lt;br /&gt;
                BytesRead = ResponseStream.Read(Buffer,0,32);&lt;br /&gt;
                StringBuilder strResponse = new StringBuilder(&amp;quot;&amp;quot;);&lt;br /&gt;
                while (BytesRead != 0)&lt;br /&gt;
                {&lt;br /&gt;
                    // Pass the response back to the client&lt;br /&gt;
                    strResponse.Append(Encoding.ASCII.GetString(Buffer,&lt;br /&gt;
                                        0, BytesRead));&lt;br /&gt;
                    m_sockClient.Send(Buffer, BytesRead, 0);&lt;br /&gt;
                    BytesSent += BytesRead;&lt;br /&gt;
                    // Read the next part of the response&lt;br /&gt;
                    BytesRead = ResponseStream.Read(Buffer, 0, 32);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (FileNotFoundException e)&lt;br /&gt;
            {&lt;br /&gt;
                SendErrorPage (404, &amp;quot;File Not Found&amp;quot;, e.Message);&lt;br /&gt;
            }&lt;br /&gt;
            catch (IOException e)&lt;br /&gt;
            {&lt;br /&gt;
                SendErrorPage (503, &amp;quot;Service not available&amp;quot;, e.Message);&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception e)&lt;br /&gt;
            {&lt;br /&gt;
                  SendErrorPage (404, &amp;quot;File Not Found&amp;quot;, e.Message);&lt;br /&gt;
                  Console.WriteLine (e.StackTrace);&lt;br /&gt;
                  Console.WriteLine (e.Message);&lt;br /&gt;
            }&lt;br /&gt;
            finally&lt;br /&gt;
            {&lt;br /&gt;
                // Disconnect and close the socket.&lt;br /&gt;
                if (m_sockClient != null)&lt;br /&gt;
                {&lt;br /&gt;
                    if (m_sockClient.Connected)&lt;br /&gt;
                    {&lt;br /&gt;
                        m_sockClient.Close ();&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            // Returning from this method will terminate the thread.&lt;br /&gt;
        }&lt;br /&gt;
        // Write an error response to the client.&lt;br /&gt;
        void SendErrorPage (int status, string strReason, string strText)&lt;br /&gt;
        {&lt;br /&gt;
            SendMessage (m_sockClient, &amp;quot;HTTP/1.0&amp;quot; + &amp;quot; &amp;quot; +&lt;br /&gt;
                         status + &amp;quot; &amp;quot; + strReason + &amp;quot;\r\n&amp;quot;);&lt;br /&gt;
            SendMessage (m_sockClient, &amp;quot;Content-Type: text/plain&amp;quot; + &amp;quot;\r\n&amp;quot;);&lt;br /&gt;
            SendMessage (m_sockClient, &amp;quot;Proxy-Connection: close&amp;quot; + &amp;quot;\r\n&amp;quot;);&lt;br /&gt;
            SendMessage (m_sockClient, &amp;quot;\r\n&amp;quot;);&lt;br /&gt;
            SendMessage (m_sockClient, status + &amp;quot; &amp;quot; + strReason);&lt;br /&gt;
            SendMessage (m_sockClient, strText);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Send a string to a socket.&lt;br /&gt;
        void SendMessage (Socket sock, string strMessage)&lt;br /&gt;
        {&lt;br /&gt;
            buffer = new Byte [strMessage.Length + 1];&lt;br /&gt;
            int len = ASCII.GetBytes (strMessage.ToCharArray(),&lt;br /&gt;
                                      0, strMessage.Length, buffer, 0);&lt;br /&gt;
            sock.Send (buffer, len, 0);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Read a string from a socket.&lt;br /&gt;
        int ReadMessage (Socket sock, byte [] buf, ref string strMessage)&lt;br /&gt;
        {&lt;br /&gt;
            int iBytes = sock.Receive (buf, 1024, 0);&lt;br /&gt;
            strMessage = Encoding.ASCII.GetString (buf);&lt;br /&gt;
            return (iBytes);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>