C#用SOCKET發送HTTP請求小例

來源:互聯網
上載者:User
  1.    
  2. 調用處代碼
  3.      private void button1_Click(object sender, EventArgs e)
  4.         {
  5.             string urlStr = this.textUrl.Text ;
  6.             if (urlStr == null || "".Equals(urlStr))
  7.             {
  8.                 MessageBox.Show( "必須填寫要防問的地址!");
  9.                 return;
  10.             }
  11.             int port = 80;
  12.             try
  13.             {
  14.                 port = Convert.ToInt32(this.textPort.Text);
  15.             }
  16.             catch
  17.             {
  18.                 MessageBox.Show( "請填寫正確的連接埠");
  19.             }
  20.             //可以為空白
  21.             string path = "/"+this.textFile.Text;
  22.             this.textBox1.Text = "";
  23.             this.conn.StartAccess(urlStr, port, path, this.textBox1);
  24.         }

 

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Net;
  6. using System.Net.Sockets;
  7. using System.Windows.Forms;
  8. namespace WindowsFormsApplication3
  9. {
  10.     class MyConnection
  11.     {
  12.         public void StartAccess( string urlStr ,int port , string path , TextBox list )
  13.         {
  14.             byte[] data = new byte[1024];
  15.             IPHostEntry gist = Dns.GetHostByName( urlStr );
  16.             //得到所訪問的網址的IP地址
  17.             IPAddress ip = gist.AddressList[0];
  18.             IPEndPoint ipEnd = new IPEndPoint(ip, port);
  19.             //使用tcp協議 stream類型 (IPV4)
  20.             Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  21.             try
  22.             {
  23.                 socket.Connect(ipEnd);
  24.             }
  25.             catch (SocketException e)
  26.             {
  27.                 MessageBox.Show("與訪問的伺服器串連異常!");
  28.                 Console.Write(e.ToString());
  29.                 return;
  30.             }
  31.             //這裡請求的相對位址,如果訪問直接www.baidu.com則不需要,可以為空白.
  32.             StringBuilder buf = new StringBuilder();
  33.             buf.Append("GET ").Append(path).Append(" HTTP/1.0/r/n");
  34.             buf.Append("Content-Type: application/x-www-form-urlencoded/r/n");
  35.             buf.Append("/r/n");
  36.             byte[] ms = System.Text.UTF8Encoding.UTF8.GetBytes(buf.ToString());
  37.             //發送
  38.             socket.Send(ms);
  39.             int recv =0;
  40.            
  41.             do
  42.             {
  43.                 recv = socket.Receive(data);
  44.                 //如果請求的頁面meta中指定了頁面的encoding為gb2312則需要使用對應的Encoding來對位元組進行轉換
  45.                 //list.Text += (Encoding.UTF8.GetString(data, 0, recv));
  46.                 list.Text += (Encoding.Default.GetString(data, 0, recv));
  47.             } while (recv != 0);
  48.             //禁用上次的發送和接受
  49.             socket.Shutdown( SocketShutdown.Both );
  50.             socket.Close();
  51.         }
  52.     }
  53. }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.