using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace UdpClientDemo_Server
{
    internal class SUser
    {
        TcpClient locaClient;
        Action<String> ShowMsg;
        BinaryWriter bw;
        BinaryReader br;
        String susername;

        /*
        public SUser(Action<String> ShowMsg, String remoteIP, int remotePort)
        {
            this.ShowMsg = ShowMsg;
            locaClient = new TcpClient();
            locaClient.Connect(remoteIP, remotePort);
            NetworkStream ns = locaClient.GetStream();
            bw = new BinaryWriter(ns);
            br = new BinaryReader(ns);

            StartJS();

        }*/
        public SUser(Action<String> ShowMsg, String remoteIP, int remotePort, string susername)
        {
            this.ShowMsg = ShowMsg;
            this.susername = susername;
            locaClient = new TcpClient();
            locaClient.Connect(remoteIP, remotePort);
            NetworkStream ns = locaClient.GetStream();
            bw = new BinaryWriter(ns);
            br = new BinaryReader(ns);

            StartJS(this.susername);

        }
        public SUser(Action<String> ShowMsg, TcpClient remote_client)
        {
            this.ShowMsg = ShowMsg;
            locaClient = remote_client;//!!!!!!!!!!
            NetworkStream ns = locaClient.GetStream();
            bw = new BinaryWriter(ns);
            br = new BinaryReader(ns);
        }
        public SUser(Action<String> ShowMsg, TcpClient remote_client, string susername)
        {
            this.ShowMsg = ShowMsg;
            locaClient = remote_client;//!!!!!!!!!!
            this.susername = susername;
            NetworkStream ns = locaClient.GetStream();
            bw = new BinaryWriter(ns);
            br = new BinaryReader(ns);
        }
        private void StartJS(String name)
        {
            String remoteEp = locaClient.Client.RemoteEndPoint.ToString() + '>' + name;

            Task.Run(() =>
            {
                while (true)
                {
                    try
                    {
                        String sss = br.ReadString();
                        ShowMsg(remoteEp + '>' + sss);
                    }
                    catch
                    {
                        ShowMsg('服务端掉线了!');
                        break;
                    }

                }
            });
        }
        public void Send(String str)
        {
            bw.Write(str);
        }
    }
}

这段代码定义了一个名为 'SUser' 的类,用于管理C#应用程序中服务器与客户端之间的通信。它使用了TCP协议进行通信,并提供以下功能:

  • 连接建立: 通过构造函数,可以传入远程IP地址、端口号和用户名来建立与服务器的连接。
  • 数据发送: 'Send' 方法允许向服务器发送字符串数据。
  • 数据接收: 'StartJS' 方法在一个单独的线程中持续监听来自服务器的消息。
  • 消息处理: 收到服务器消息后,会调用 'ShowMsg' 委托来处理和显示消息。
  • 异常处理: 'StartJS' 方法包含异常处理机制,当服务器断开连接时,会显示提示信息。

该代码段可以作为开发C#网络应用程序的参考,特别是需要实现服务器-客户端通信功能的场景。你可以根据实际需求修改和扩展此代码。

C# UDP Socket编程实现服务器与客户端通信

原文地址: https://www.cveoy.top/t/topic/dnEO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录