C# TCP服务器程序

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

namespace MyProject
{
    public class TcpServer
    {
        public Socket ListenSocket { get; set; }
        public bool ListenFlag { get; set; }
        public Socket AcceptSocket { get; set; }
        public bool AcceptFlag { get; set; }
        public bool ReceiveFlag { get; set; }
        public int ReceiveLength { get; set; }
        public byte[] ReceiveBuffer { get; set; } = new byte[1024];

        public int Listen(string ip, int port)
        {
            if (!ListenFlag)
            {
                ListenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint ipAndPort = new IPEndPoint(IPAddress.Parse(ip), port);
                try
                {
                    ListenSocket.Bind(ipAndPort);
                    ListenSocket.Listen(10);
                    Thread threadListen = new Thread(Accept);
                    threadListen.IsBackground = true;
                    threadListen.Start();
                    ListenFlag = true;
                    return 0;
                }
                catch (Exception)
                {
                    return -1;
                }
            }
            else
            {
                return 1;
            }
        }

        public void Close()
        {
            if (ListenFlag)
            {
                AcceptSocket.Close();
                ListenSocket.Close();
                AcceptFlag = false;
                ListenFlag = false;
            }
        }

        private void Accept()
        {
            while (ListenFlag)
            {
                if (!AcceptFlag)
                {
                    try
                    {
                        AcceptSocket = ListenSocket.Accept();
                        AcceptFlag = true;

                        Thread threadReceive = new Thread(Receive);
                        threadReceive.IsBackground = true;
                        threadReceive.Start();
                    }
                    catch (Exception)
                    {
                        break;
                    }
                }
                Thread.Sleep(100);
            }
        }

        private void Receive()
        {
            while (AcceptFlag)
            {
                try
                {
                    ReceiveLength = AcceptSocket.Receive(ReceiveBuffer);
                    if (ReceiveLength == 0)
                    {
                        Thread.Sleep(100);
                        if (AcceptSocket.Connected)
                        {
                            AcceptSocket.Close();
                            AcceptFlag = false;
                        }
                        break;
                    }
                    else
                    {
                        ReceiveFlag = true;
                    }
                }
                catch (Exception)
                {
                    break;
                }
            }
        }

        public int Send(byte[] buffer)
        {
            if (AcceptSocket.Connected)
            {
                try
                {
                    AcceptSocket.Send(buffer);
                    return 0;
                }
                catch (Exception)
                {
                    return -1;
                }
            }
            else
            {
                return 1;
            }
        }
    }
}

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以帮你编写一个基本的C# TCP服务器端口程序。以下是一个简单的示例: ```csharp using System; using System.Net; using System.Net.Sockets; using System.Text; public class TCPServer { public static void Main() { // 服务器IP和端口 string ip = "127.0.0.1"; int port = 8080; // 创建TCP监听器 TcpListener listener = new TcpListener(IPAddress.Parse(ip), port); try { // 启动监听器 listener.Start(); Console.WriteLine("服务器已启动,等待客户端连接..."); while (true) { // 接受客户端连接 TcpClient client = listener.AcceptTcpClient(); Console.WriteLine("客户端已连接"); // 获取客户端的网络流 NetworkStream stream = client.GetStream(); // 读取客户端发送的数据 byte[] buffer = new byte[1024]; int bytesRead = stream.Read(buffer, 0, buffer.Length); string requestData = Encoding.ASCII.GetString(buffer, 0, bytesRead); Console.WriteLine("接收到客户端数据:{0}", requestData); // 处理客户端请求(这里仅作为示例,直接返回相同的数据) byte[] responseData = Encoding.ASCII.GetBytes(requestData); stream.Write(responseData, 0, responseData.Length); Console.WriteLine("发送响应数据给客户端:{0}", requestData); // 关闭连接 client.Close(); Console.WriteLine("客户端已断开连接"); } } catch (Exception ex) { Console.WriteLine("服务器发生错误:{0}", ex.Message); } finally { // 停止监听器 listener.Stop(); } Console.ReadLine(); } } ``` 这是一个简单的TCP服务器端口程序,它会监听指定的IP地址和端口,接受客户端连接,并读取客户端发送的数据,然后返回相同的数据给客户端。你可以根据需求进行修改和扩展。请注意,这只是一个基本示例,实际应用中可能需要处理更多的逻辑和错误处理。希望对你有所帮助!如果有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值