這個我不知道起個什麼名字好。只是在寫TcpClient的時候想重寫了TcpClient Client屬性的Send方法,實際上就是Socket的Send方法了。因為我要以字串互動資料,這個byte[]轉換太麻煩了。
比如發送接收,在沒有有重寫的時候,發送和接受台麻煩了。
TcpClient client = listener.AcceptTcpClient();
string buff = "成功建立串連\r\n";
byte[] b = System.Text.Encoding.Default.GetBytes(buff);
client.Client.Send(b);
NetworkStream myNetworkStream = client.GetStream();
byte[] bytes = new byte[1024];
int bytesRead = myNetworkStream.Read(bytes, 0, bytes.Length);
string getstr = Encoding.Default.GetString(bytes, 0, bytesRead);
如果定義一個類 MyTcpClient 繼承自 TcpClient ,但是listener.AcceptTcpClient();的類型是TcpClient ,無法轉換為MyTcpClient 。
MyTcpClient client = (MyTcpClient )listener.AcceptTcpClient();是不可以的。
那麼,如果我直接定義MyTcpClient 有Send方法
/// <summary>
/// 下發服務端資訊
/// </summary>
/// <param name="msg"></param>
public void Send(string msg)
{
byte[] b = System.Text.Encoding.Default.GetBytes(msg);
Tcp.Client.Send(b);
}
在這裡是無法使用了。
另類一點的方法是彙總一下。
具體代碼就是 /// <summary>
/// 該類型為TcpClient
/// 值為new TcpListener().AcceptTcpClient()
/// </summary>
public class MyTcpClient
{
TcpClient Tcp { get; set; }
NetworkStream myNetworkStream;
public bool Connected { get { return Tcp.Connected; } }
/// <summary>
/// 下發服務端資訊
/// </summary>
/// <param name="msg"></param>
public void Send(string msg)
{
byte[] b = System.Text.Encoding.Default.GetBytes(msg);
Tcp.Client.Send(b);
}
public void Close()
{
myNetworkStream.Close();
Tcp.Close();
}
/// <summary>
/// 接收用戶端資料
/// </summary>
/// <returns></returns>
public string Received()
{
byte[] bytes = new byte[1024];
int bytesRead = myNetworkStream.Read(bytes, 0, bytes.Length);
string getstr = Encoding.Default.GetString(bytes, 0, bytesRead);
return getstr;
}
MyTcpClient(TcpClient tcp)
{
Tcp = tcp;
myNetworkStream = Tcp.GetStream();
}
/// <summary>
/// 重載等於
/// </summary>
/// <param name="tcp"></param>
/// <returns></returns>
public static implicit operator MyTcpClient(TcpClient tcp)
{
return new MyTcpClient(tcp);
}
}
這樣用MyTcpClient 替換掉TcpClient 是不是很另類,呵呵
使用的時候 TcpListener listener = null;
listener = new TcpListener(8009);
listener.Start();
while (true)
{
MyTcpClient client = listener.AcceptTcpClient();
client.Send(DateTime.Now.ToString() + "成功建立串連\r\n");
Console.Write(client.Received());
client.Close();
}
listener.Stop();
這就簡單太多了 : p