C#TCP客户端发送数据到服务器当服务器有一次未回复时后面客户端再发数据必须服务器回复两次后客户端才能接收到返回的数据
这个需求可以通过在客户端发送数据前先检查服务器是否已经回复了上一次的请求,如果没有回复则等待两次回复后再发送新的请求。以下是一个简单的实现示例:
using System;
using System.Net.Sockets;
using System.Text;
class Client {
private const string SERVER_IP = "127.0.0.1";
private const int SERVER_PORT = 8888;
private TcpClient tcpClient;
private NetworkStream stream;
private byte[] receiveBuffer = new byte[1024];
private bool waitingForResponse = false;
private int responseCount = 0;
public void Connect() {
tcpClient = new TcpClient();
tcpClient.Connect(SERVER_IP, SERVER_PORT);
stream = tcpClient.GetStream();
stream.BeginRead(receiveBuffer, 0, receiveBuffer.Length, OnReceive, null);
}
public void Send(string message) {
if (waitingForResponse) {
// 如果还在等待上一个请求的回复,则等待两次回复后再发送新的请求
responseCount = 0;
}
byte[] buffer = Encoding.UTF8.GetBytes(message);
stream.Write(buffer, 0, buffer.Length);
waitingForResponse = true;
}
private void OnReceive(IAsyncResult result) {
int count = stream.EndRead(result);
if (count > 0) {
string message = Encoding.UTF8.GetString(receiveBuffer, 0, count);
Console.WriteLine("Received: " + message);
if (waitingForResponse) {
responseCount++;
if (responseCount >= 2) {
waitingForResponse = false;
}
}
stream.BeginRead(receiveBuffer, 0, receiveBuffer.Length, OnReceive, null);
}
}
public void Disconnect() {
tcpClient.Close();
}
}
使用时可以先创建一个 Client 实例并调用 Connect 方法连接到服务器,然后可以多次调用 Send 方法发送数据,每次发送前会自动检查服务器是否已经回复上一次的请求,如果没有则等待两次回复后再发送新的请求。注意在程序结束时应该调用 Disconnect 方法关闭客户端连接
原文地址: https://www.cveoy.top/t/topic/fIvn 著作权归作者所有。请勿转载和采集!