互联网解决方案咨询

梦想有多大路就会有多远:作一颗IT量子
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Asp.net Socket 客户端(发送和接收数据 )

Posted on 2008-02-23 18:19  互联网粒子  阅读(1921)  评论(0编辑  收藏  举报

以下是简单的socket client代码,真正用在socket 通讯上还会有些问题,只做学习和参考.

/***************************************
 * 对象名称: SocketObj
 * 功能说明: 远程发送与接收
 * 试用示例:
 *           using EC;  //引用空间名
 *           string url = "192.168.1.10";   // URL也可以是(DNS)这种形式
 *           int port = 339;    //端口
 *           string SendStr = "domainname\n"; //组织要发送的字符串
 *           SendStr += "check\n";
 *           SendStr += "entityname:domains\n";
 *           SendStr += "domainname:" + this.TextBox1.Text + "\n";
 *           SendStr += ".\n";
 *           EBSocketObj o = new SocketObj();  //创建新对象
 *           o.Connection(url, port);                //打开远程端口
 *           o.Send(SendStr);                     //发送数据
 *           Response.Write(o.Recev()); //接收数据
 *           o.Dispose(); //销毁对象

**********************************************/

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace EC
{
    /// <summary>
    /// Socket 远程发送与接收
    /// </summary>
    public class SocketObj
    {
        private NetworkStream ns;
        private bool _alreadyDispose = false;

        #region 构造与释构
        public EBSocketObj()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }
        public EBSocketObj(string url, int port)
        {
            Connection(url, port);
        }
        ~EBSocketObj()
        {
            Dispose();
        }
         protected virtual void Dispose(bool isDisposing)
        {
            if (_alreadyDispose) return;
            if (isDisposing)
            {
                if (ns != null)
                {
                    try
                    {
                        ns.Close();
                    }
                    catch (Exception E) { }
                    ns.Dispose();
                }
            }
            _alreadyDispose = true;
        }
        #endregion

        #region IDisposable 成员

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
        #endregion

        #region 打开端口
        /// <summary>
        /// 打开端口
        /// </summary>
        /// <param name="url">URL或者:IP地址</param>
        /// <param name="port"></param>
        /// <returns></returns>
        public virtual void Connection(string url, int port)
        {
            if (url == null || url == "") return;
            if (port < 0) return;
            if (port.ToString()==string.Empty) port = 80;
            TcpClient tcp = null;
            try
            {
                tcp = new TcpClient(url, port);
            }
            catch (Exception E)
            {
                throw new Exception("Can't connection:" + url);
            }
            this.ns = tcp.GetStream();
        }
        #endregion

        #region 发送Socket
        /// <summary>
        /// 发送Socket
        /// </summary>
        /// <param name="ns"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public virtual bool Send(string message)
        {
            if (ns == null) return false;
            if (message == null || message == "") return false;
            byte[] buf = Encoding.ASCII.GetBytes(message);
            try
            {
                ns.Write(buf, 0, buf.Length);
            }
            catch (Exception E)
            {
                throw new Exception("Send Date Fail!");
            }
            return true;
        }
        #endregion

        #region 收取信息
        /// <summary>
        /// 收取信息
        /// </summary>
        /// <param name="ns"></param>
        /// <returns></returns>
        public string Recev()
        {
            if (ns == null) return null;
            byte[] buf = new byte[4096];
            int length = 0;
            try
            {
                length = ns.Read(buf, 0, buf.Length);//这里也可以是一个对象,把byte转成一个对象
            }
            catch (Exception E)
            {
                throw new Exception("Receive data fail!");
            }
            return Encoding.ASCII.GetString(buf, 0, length);
        }
        #endregion

   }
}