ASP.NET使用Socket发送和接收消息

使用Socket发送和接收消息

ASP.NET应用程序中,可以通过Socket发送和接收消息。发送的消息可以是文本内容、文件或其他类型的数据。本实例介绍使用System.Net.Sockets名字空间中的方法发送和接收文件的方法。

技术要点

本实例介绍如何使用ASP.NET通过System.Net.Sockets名字空间中的方法发送和接收文件。在发送过程中,首先介绍读取文件的方法,并把文件读取到二进制数组中,然后使用Sockets中的Send()方法发送文件的数据。

跟我做

1.创建新ASP.NET应用程序

在Visual Studio 2015集成开发环境中创建新的ASP.NET Web应用程序。

2.设计页面MySocket.aspx

把应用程序的默认页面WebForm1.aspx重命名为MySocket.aspx

MySocket.aspxHTML设计代码如下:

<%@ Page language="c#" Codebehind="MySocket.aspx.cs" AutoEventWireup="false" Inherits="Example_12_7.MySocket" %>
<HTML>
  <HEAD>
     <title>使用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.NetSystem.Net.Sockets中,因此需要引入这些名字空间。程序代码如下:

//引入名字空间
using System.Net;

using System.IO;

using System.Net.Sockets;

4.创建被发送的文件myFile.txt

在应用程序的根目录下创建使用Socket发送的文件myFile.txt,它为一个text类型的文本文件。

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所示的初始界面。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值