zoukankan      html  css  js  c++  java
  • ASP.NET使用Socket发送和接收消息[转载]

    使用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的初始界面

  • 相关阅读:
    Jenkins与Hudson的关系
    Jenkins企业版与CloudBees
    NSLookup命令
    XCopy提示“访问遭到拒绝”问题解决
    npm配置文件
    npm下载包时代理配置
    Jenkins实现测试环境到生产环境一键部署(Windows)
    可能是迄今为止最好的GitHub代码浏览插件--赞
    Ali OSS服务端签名直传并设置上传回调
    导入https证书
  • 原文地址:https://www.cnblogs.com/di305449473/p/1242615.html
Copyright © 2011-2022 走看看