虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > C#编程 > C#使用TcpListener及TcpClient开发一个简单的Chat工具实例

C#使用TcpListener及TcpClient开发一个简单的Chat工具实例
类别:C#编程   作者:码皇   来源:互联网   点击:

下面小编就为大家分享一篇C 使用TcpListener及TcpClient开发一个简单的Chat工具实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

本文使用的开发环境是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工具实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

  • C#实现简单聊天程序的方法
相关热词搜索: C TcpListener TcpClient Chat工具