首页 > 编程 > C# > 正文

C#使用TcpListener及TcpClient开发一个简单的Chat工具实例

2020-01-24 00:23:10
字体:
来源:转载
供稿:网友

本文使用的开发环境是VS2017及dotNet4.0,写此随笔的目的是给自己及新开发人员作为参考,

本例子比较简单,使用的是控制台程序开发,若需要使用该软件作为演示,必须先运行服务端,再运行客户端。

因为是首次接触该方面的知识,写得比较简陋,如有更好的建议,请提出,谢谢!

一、编写服务器端代码,如下:

using System;using System.Text;using System.Net;using System.Net.Sockets;using System.Threading.Tasks;namespace ChatServer{ class Program {  static void Main(string[] args)  {   bool cancel = false;   byte[] buffer = new byte[1024];   string message;   byte[] messageBytes;   int count = 0;   TcpListener tcpListener = new TcpListener(new IPEndPoint(IPAddress.Any, 13000));   tcpListener.Start();   Console.WriteLine("Waiting for a connection... ");   TcpClient tcpClient = tcpListener.AcceptTcpClient();   Console.WriteLine("Connected.");   NetworkStream stream = tcpClient.GetStream();      Task.Factory.StartNew(() =>    {    while ((count = stream.Read(buffer, 0, buffer.Length)) != 0)    {     Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss fff} Reply from server {tcpClient.Client.LocalEndPoint.ToString()}:{Encoding.UTF8.GetString(buffer, 0, count)}");    }   });        Task t = Task.Factory.StartNew(() =>    {    while(!cancel)    {     message = Console.ReadLine();     if (message.ToUpper() == "Y")     {      cancel = true;      return;     }     messageBytes = Encoding.UTF8.GetBytes(message);     stream.Write(messageBytes, 0, messageBytes.Length);    }   });         if (cancel) tcpClient.Close();       while (true)   {    if (t != null && t.IsCompleted) break;   }  } }}

二、编写客户端代码,如下:

using System;using System.Linq;using System.Text;using System.Net;using System.Net.Sockets;using System.Threading;using System.Threading.Tasks;namespace ChatClient{ class Program {  static void Main(string[] args)  {   bool cancel = false;   byte[] buffer = new byte[1024];   string message;   byte[] messageBytes;   int count = 0;   try   {    TcpClient tcpClient = new TcpClient(new IPEndPoint(Dns.GetHostEntry(Dns.GetHostName()).AddressList.Where(p => p.AddressFamily == AddressFamily.InterNetwork).First(), 14000));    tcpClient.Connect(new IPEndPoint(IPAddress.Parse("192.168.94.26"), 13000));    NetworkStream stream = tcpClient.GetStream();        Task.Factory.StartNew(() =>    {     while ((count = stream.Read(buffer, 0, buffer.Length)) != 0)     {      Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss fff} Reply from client {tcpClient.Client.LocalEndPoint.ToString()}:{Encoding.UTF8.GetString(buffer, 0, count)}");     }    });    Task t = Task.Factory.StartNew(() =>    {     while (!cancel)     {      message = Console.ReadLine();      if (message.ToUpper() == "Y")      {       cancel = true;       return;      }      messageBytes = Encoding.UTF8.GetBytes(message);      stream.Write(messageBytes, 0, messageBytes.Length);      Thread.Sleep(10);     }    });    if (cancel) tcpClient.Close();        while (true)    {     if (t != null && t.IsCompleted) break;    }   }   catch(Exception ex)   {    Console.WriteLine(ex.Message);    Console.ReadKey();   }   }  }}

三、先运行服务端代码,后再另外一台电脑运行客户端代码,效果图如下:

以上这篇C#使用TcpListener及TcpClient开发一个简单的Chat工具实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表