我的编程空间,编程开发者的网络收藏夹
学习永远不晚

TCP服务器的C#实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

TCP服务器的C#实现

TCP实现类

internal class TcpServer    {        public Socket ServerSocket { get; set; }        public Dictionary<string,Socket> Sockets { get; set; }= new Dictionary<string,Socket>();        public byte[] SendBuffer { get; set; }        public byte[] ReceiveBuffer { get; set; }        ///         /// 创建构造函数        ///         ///         ///         public TcpServer(int sendBufferLength, int receiveBufferLength)        {            SendBuffer = new byte[sendBufferLength];            ReceiveBuffer = new byte[receiveBufferLength];        }        ///         /// 启动服务器        ///         ///         ///         public void Start(string ip, string port)        {            ServerSocket = CreateSocket(ip, port);            CreateThread();        }        ///         /// 服务端向指定客户端发送消息        ///         ///         ///         public void Send(string clientInfo, byte[] data)        {            Socket socket = Sockets[clientInfo];            socket.Send(data);        }        ///         /// 创建服务端Socket        ///         ///         ///         ///         private Socket CreateSocket(string ip, string port)        {            Socket socket=new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            IPAddress address=IPAddress.Parse(ip);            IPEndPoint endPoint=new IPEndPoint(address, int.Parse(port));            socket.Bind(endPoint);            socket.Listen(20);            return socket;        }        ///         /// 创建监听客户端的线程并启动        ///         private void CreateThread()        {            Thread watchThread = new Thread(WatchConnection);            watchThread.IsBackground = true;            watchThread.Start();        }        ///         /// 监听客户端请求        ///         private void WatchConnection()        {            while (true)            {                Socket clientSocket = null;                try                {                    clientSocket = ServerSocket.Accept();                    IPEndPoint endPoint = (IPEndPoint)clientSocket.RemoteEndPoint;                    string ip= endPoint.Address.ToString();                    string port= endPoint.Port.ToString();                    Sockets.Add(ip + ":" + port, clientSocket);                }                catch (Exception ex)                {                    Console.WriteLine(ex.ToString());                    break;                }                ParameterizedThreadStart pts = new ParameterizedThreadStart(ClientReceiver);                Thread clientThread = new Thread(pts);                clientThread.IsBackground = true;                clientThread.Start(clientSocket);            }        }        ///         ///         ///         ///         private void ClientReceiver(object socket)        {            Socket clientSocket=socket as Socket;            int ReceiveBufferSize = 1 * 1024;            while (true)            {                int receivedLength = 0;                byte[] buffer = new byte[ReceiveBufferSize];                try                {                    List<byte> ls = new List<byte>();                    if (clientSocket != null)                    {                        receivedLength = clientSocket.Receive(buffer);                        if (receivedLength > 0)                        {Buffer.BlockCopy(buffer,0, ReceiveBuffer, 0, receivedLength);string msg = "Receive Success " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");byte[] datas = System.Text.Encoding.UTF8.GetBytes(msg);clientSocket.Send(datas);                        }                    }                }catch(Exception ex)                {                    Console.WriteLine(ex.ToString());                    break;                }            }        }    }

页面布局

<Grid Margin="10">        <Grid.RowDefinitions>            <RowDefinition Height="50"/>            <RowDefinition Height="50"/>            <RowDefinition Height="50"/>            <RowDefinition Height="*"/>            <RowDefinition Height="50"/>            <RowDefinition Height="50"/>        </Grid.RowDefinitions>        <TextBlock Grid.Row="0" Text="配置" VerticalAlignment="Center"/>        <DockPanel Grid.Row="1">            <DockPanel HorizontalAlignment="Left">                <TextBlock Text="地址" VerticalAlignment="Center" Margin="20 0 10 0"/>                <TextBox x:Name="TextBoxIp" Text="" Width="100" Height="36" VerticalContentAlignment="Center"/>                <TextBlock Text="端口" VerticalAlignment="Center" Margin="20 0 10 0"/>                <TextBox x:Name="TextBoxport" Text="" Width="100" Height="36" VerticalContentAlignment="Center"/>                <Button x:Name="ButtonStart" Content="启动" Width="75" Height="36" Margin="20,0,10,0" Click="ButtonStart_Click"/>            </DockPanel>            <DockPanel HorizontalAlignment="Right">                <TextBlock Text="客户端" VerticalAlignment="Center" Margin="20 0 10 0"/>                <ComboBox x:Name="ComboBoxClient" SelectedValuePath="Key" DisplayMemberPath="Key" Width="200" Height="36" Margin="20 0 10 0" SelectionChanged="ComboBoxClient_SelectionChanged"/>            </DockPanel>        </DockPanel>        <TextBlock Grid.Row="2" Text="接收" VerticalAlignment="Center"/>        <TextBox Grid.Row="3" Name="TextBoxReciver" Text=""/>        <TextBlock Grid.Row="4" Text="发送" VerticalAlignment="Center"/>        <StackPanel Grid.Row="5" Orientation="Horizontal">            <TextBox x:Name="TextBoxSender" Text="" Width="650" Height="36"/>            <Button Content="发送" Click="ButtonSend_CLick" Width="75" Height="36" HorizontalAlignment="Right" Margin="10 0 20 0"/>        </StackPanel>    </Grid>

后台代码

TcpServer tcpServer= null;        public MainWindow()        {            InitializeComponent();            tcpServer = new TcpServer(2 * 1024, 2 * 1024);            TextBoxIp.Text = "10.11.10.44";            TextBoxport.Text = "8080";        }        private void ButtonStart_Click(object sender, RoutedEventArgs e)        {            string address = this.TextBoxIp.Text;            string[] arr= address.Split('.');            if (arr.Length == 4)            {                foreach(string item in arr)                {                    int i=int.Parse(item);                    if(i < 0 || i > 255)                    {                        return;                    }                }            }            string port = this.TextBoxport.Text;            int j= int.Parse(port);            if (j < 0)            {                return;            }            ComboBoxClient.ItemsSource = tcpServer.Sockets;            tcpServer.Start(address, port);        }        string currentClient = null;        private void ComboBoxClient_SelectionChanged(object sender, SelectionChangedEventArgs e)        {            //currentClient = ComboBoxClient.SelectedValue.ToString();            ComboBox comboBox = sender as ComboBox;            string str = comboBox.SelectedValue.ToString();            if (tcpServer.Sockets.ContainsKey(str))            {                currentClient = str;            }        }        private void ButtonSend_CLick(object sender, RoutedEventArgs e)        {            if (currentClient != null)            {                string str = TextBoxSender.Text;                byte[] bytes=System.Text.Encoding.UTF8.GetBytes(str);                tcpServer.Send(currentClient,bytes);            }        }

运行结果
在这里插入图片描述

来源地址:https://blog.csdn.net/qq_27474555/article/details/131287696

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

TCP服务器的C#实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

GO语言如何实现TCP服务器

今天小编给大家分享一下GO语言如何实现TCP服务器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。interface/tcp/
2023-07-05

Android实现TCP断点上传 后台C#服务接收

终端实现大文件上传一直都是比较难的技术,其中涉及到后端与前端的交互,稳定性和流量大小,而且实现原理每个人都有自己的想法,后端主流用的比较多的是Http来实现,因为大多实现过断点下载。但稳定性不能保证,一旦断开,无法续传。所以得采用另一种流行
2022-06-06

GO语言实现TCP服务器的示例代码

这篇文章主要为大家详细介绍了如何通过GO语言实现TCP服务器,文中的示例代码讲解详细,对我们深入了解Go语言有一定的帮助,需要的可以参考一下
2023-03-24

C#如何实现TCP和UDP通信

本篇内容主要讲解“C#如何实现TCP和UDP通信”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#如何实现TCP和UDP通信”吧!C#在命名空间System.Net.Sockets中对伯克利套接
2023-07-05

java中TCP实现回显服务器及客户端

本文主要介绍了java中TCP实现回显服务器及客户端,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-05

C#实现TCP和UDP通信的示例详解

这篇文章主要为大家详细介绍了C#实现TCP和UDP通信的相关知识,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
2023-03-01

C++实现本地TCP通讯的示例代码

本文详细介绍了如何使用C++实现本地TCP通讯。通过提供服务器端和客户端端代码,它展示了如何创建套接字、绑定地址和端口,以及在本地计算机上建立和处理连接。该示例可用于在需要通过TCP进行可靠数据传输的应用中。
C++实现本地TCP通讯的示例代码
2024-04-02

Golang TCP服务器 - 实现客户端之间的数据交流

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《Golang TCP服务器 - 实现客户端之间的数据交流》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎
Golang TCP服务器 - 实现客户端之间的数据交流
2024-04-04

编程热搜

目录