您好,我一直在研究一个简单的服务器/客户端,但是有一个问题我无法在一个 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));
}
}
}
希望有人能帮助我,谢谢!