ASP.NET–使用Socket發送和接收訊息[轉載]

來源:互聯網
上載者:User
文章目錄
  • 技術要點
  • 跟我做
使用Socket發送和接收訊息

在ASP.NET應用程式中,可以通過Socket發送和接收訊息。發送的訊息可以是常值內容、檔案或其他類型的資料。本執行個體介紹使用System.Net.Sockets名字空間中的方法發送和接收檔案的方法。

技術要點

本執行個體介紹如何使用ASP.NET通過System.Net.Sockets名字空間中的方法發送和接收檔案。在發送過程中,首先介紹讀取檔案的方法,並把檔案讀取到位元組中,然後使用Sockets中的Send()方法傳送檔案的資料。

跟我做

1.建立新ASP.NET應用程式

在Visual Studio .NET 2003整合式開發環境中建立新的ASP.NET Web應用程式,命名為Example_12_7。

2.設計頁面MySocket.aspx

把應用程式Example_12_7的預設頁面WebForm1.aspx重新命名為MySocket.aspx,並在該頁面上添加,頁面MySocket.aspx的設計介面12-19所示。

圖12-19  頁面MySocket.aspx的設計介面

頁面MySocket.aspx的HTML設計代碼如下:

<%@ Page language="c#" Codebehind="MySocket.aspx.cs" AutoEventWireup="false" Inherits="Example_12_7.MySocket" %>
<HTML>
  <HEAD>
     <title>Example_12_7:使用Socket發送和接收訊息</title>
  </HEAD>
<asp:Label id="LabelMessage" runat="server">網頁正在發送資料,請等待……</asp:Label>
<asp:Button ID="ReceiveBtn" Runat="server" Text="接收資料"></asp:Button>
<asp:Label id="LabelData" runat="server"></asp:Label></td>
</HTML>

3.添加Socket名字空間
由於頁面MySocket.aspx在發送和接收資訊時需要使用Socket類實現HTTP等一些屬性,它們被包含在名字空間System.Net和System.Net.Sockets中,因此需要引入這些名字空間。程式碼如下:

//引入名字空間

using System.Net;

using System.IO;

using System.Net.Sockets;

4.建立被發送的檔案myFile.txt

在應用程式Example_12_7的根目錄下建立使用Socket發送的檔案myFile.txt,它為一個text類型的文字檔,其內容12-20所示。

圖12-20  被發送的myFile.txt檔案

5.設計頁面MySocket.aspx的事件和函數

頁面MySocket.aspx調用函數Page_Load(object sender,System.EventArgs e)初始化,該函數調用函數SocketSend()傳送檔案資訊。函數SocketSend()首先建立發送資訊的Socket對象,並定義發送的IP地址和連接埠,然後讀取myFile.txt檔案的資訊,最後再調用函數Send()傳送檔案的資料。函數Page_Load(object sender, System.EventArgs e)和函數SocketSend()的程式碼如下:

private void Page_Load(object sender, System.EventArgs e)
{
    if (!Page.IsPostBack)
    {
        //發送資料
        SocketSend();
    }
}

private void SocketSend()
{
    //建立發送資料的Socket
    Socket sendsocket = new Socket(AddressFamily.InterNetwork,
    SocketType.Stream, ProtocolType.Tcp);

    //設定發送資料的地址
    IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 80);

    //建立讀取檔案的流
    FileStream fileSteam = new FileStream(Server.MapPath("myFile.txt"),
    FileMode.OpenOrCreate, FileAccess.Read);

    //檔案大小
    Byte[] fsSize = new Byte[fileSteam.Length - 1];

    //讀取檔案的二進位流
    BinaryReader reader = new BinaryReader(fileSteam);

    //讀取資料
    reader.Read(fsSize, 0, (int)fileSteam.Length - 1);

    //連結目的地
    sendsocket.Connect(endPoint);

    //發送資料
    sendsocket.Send(fsSize);

    //關閉檔案流
    fileSteam.Close();

    //關閉發送資料的Socket
    sendsocket.Shutdown(SocketShutdown.Send);
    sendsocket.Close();
}

單擊頁面MySocket.aspx中的【接收資料】按鈕觸發事件ReceiveBtn_Click(object sender, System.EventArgs e),該事件調用函數SendReceiveData()接收從函數SocketSend()發送的資料。函數SendReceiveData()首先建立用來接收資料的Socket對象,並設計接收資料的IP地址和連接埠,最後把接收的資料寫入檔案並儲存。函數SendReceiveData()和事件ReceiveBtn_Click(object sender, System. EventArgs e)的程式碼如下:

private void ReceiveBtn_Click(object sender, System.EventArgs e)
{
    //接收資料
    SendReceiveData();
}

private void SendReceiveData()
{
    //建立接收資料的Socket
    Socket receiveSocket = new Socket(AddressFamily.InterNetwork,
    SocketType.Stream, ProtocolType.Tcp);

    //設定接收資料的地址
    IPEndPoint hostPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 80);

    //設定連接埠
    receiveSocket.Bind(hostPoint);

    //監聽
    receiveSocket.Listen(2);

    //設定接收資料緩衝區的大小
    Byte[] recData = new Byte[300000000];
    Socket hostSocket = receiveSocket.Accept();

    //接收資料
    hostSocket.Receive(recData);
    if (hostSocket.Receive(recData) > 0)
    {
        //顯示接收資料的資訊
        LabelData.Text = "網頁在" + DateTime.Now.ToString()
        + "接收的資料大小為:" + hostSocket.Receive(recData).ToString();
    }

    //建立一個新檔案儲存接收的資料
    FileStream fileStream = new FileStream(Server.MapPath("myNewFile.dat"),
    FileMode.OpenOrCreate);
    BinaryWriter writer = new BinaryWriter(fileStream);
    writer.Write(recData, 0, recData.Length - 1);

    //關閉寫檔案流
    fileStream.Close();
    writer.Close();

    //關閉接收資料的Socket
    hostSocket.Shutdown(SocketShutdown.Receive);
    hostSocket.Close();

}

運行效果
設定頁面MySocket.aspx為應用程式的起始頁面。按F5鍵運行,出現12-21所示的初始介面。

圖12-21  頁面MySocket.aspx的初始介面

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.