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

以下是简单的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

}

}