-1

您好,我一直在研究一个简单的服务器/客户端,但是有一个问题我无法在一个 cmd(客户端/服务器)上依次键入 2 条消息,所以我用发送/接收命令做了一个计时器,但是当我开始它在同一秒内停止

这是服务器的代码

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

    namespace Server
    {
        class Program
        {
            //--------------------------------------------------------------------------------------------
            static TcpClient connected;
            //--------------------------------------------------------------------------------------------
            static void Main(string[] args)
            {
                TcpListener listener = new TcpListener(IPAddress.Any, 1980);

                listener.Start();
                connected = listener.AcceptTcpClient();

                System.Timers.Timer timer = new System.Timers.Timer();
                timer.Elapsed += new ElapsedEventHandler(timerTick);
                timer.Interval = 100;

                Thread.Sleep(1000);
                timer.Enabled = true;
            }
            //--------------------------------------------------------------------------------------------
            static byte[] buffer = new byte[4096];
            //--------------------------------------------------------------------------------------------
            static void send()
            {

                NetworkStream stream = connected.GetStream();
                byte[] data = Encoding.ASCII.GetBytes(Console.ReadLine());
                stream.Write(data, 0, data.Length);
                send();
            }
            //--------------------------------------------------------------------------------------------
            public static void timerTick(object source, ElapsedEventArgs e)
            {
                    receive();

            }
            //--------------------------------------------------------------------------------------------
            static void sendCP()
            {

                NetworkStream stream = connected.GetStream();
                byte[] data = Encoding.ASCII.GetBytes("Connected To Server");
                stream.Write(data, 0, data.Length);

            }



            static void receive()
            {
                NetworkStream stream = connected.GetStream();
                int data = stream.Read(buffer, 0, 4096);
                string rec = Encoding.ASCII.GetString(buffer, 0, data);

                Console.WriteLine("Client: " + Encoding.ASCII.GetString(buffer, 0, data));
                for (; ; ) { }
            }
        }
    }

这是客户的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Timers;
namespace Client
{
    class Program
    {
        static TcpClient client;

        static void Main(string[] args)
        {
          System.Timers.Timer timer = new System.Timers.Timer();
          timer.Elapsed += new ElapsedEventHandler(timerTick);
          timer.Interval = 1000;
          client = new TcpClient();
            client.Connect("127.0.0.1", 1980);
            if (client.Connected)
            {
                sendCP();
                timer.Enabled = true;
            }
        }
        public static void timerTick(object source,ElapsedEventArgs e)
        {
            while (client.Connected)
            {
                receive();
            }
        }
        static byte[] buffer = new byte[4096];
        static void send()
        {

            NetworkStream stream = client.GetStream();
            byte[] data = Encoding.ASCII.GetBytes(Console.ReadLine());
            stream.Write(data, 0, data.Length);
            send();
        }
        static void sendCP()
        {

            NetworkStream stream = client.GetStream();
            byte[] data = Encoding.ASCII.GetBytes("Connected To Client");
            stream.Write(data, 0, data.Length);
        }
        static void receive()
        {
            NetworkStream stream = client.GetStream();
            int data = stream.Read(buffer, 0, 4096);
            string rec = Encoding.ASCII.GetString(buffer, 0, data);
            Console.WriteLine("Server: " + Encoding.ASCII.GetString(buffer, 0, data));
        }
    }
}

希望有人能帮助我,谢谢!

4

1 回答 1

1

您已经创建了计时器但从未启动它们,程序在启动后退出。您的代码中有更多错误,将计划操作与事件驱动混合在一起。每 1000 毫秒尝试发送一些东西,但等待 Console.ReadLine()

于 2012-07-29T13:40:03.407 回答