我目前正在开始大学网络规划课程的套接字编程项目。我也在做一个编程课,我们在其中学习C#,所以我认为使用C#完成此作业是合适的。
任务是创建一个简单的服务器-客户端连接,并在它们之间发送数据。这不是太大的问题,我已经阅读了一些教程并观看了一些视频,我想我知道自己在做什么。让我有些困惑的那部分是:
“ 2)服务器每秒例如通过单个字母“ R”或“ r”(请求)向客户端发送命令以寻求测量数据。(此处需要定时控制)。
这让我感到困惑,到底什么是时序控制?以及我该如何实施它。
提前致谢。
编辑:我发现了时序控制的“示例”,但它在C / C ++中,我是否需要做些喜欢的事情?
/* Step 5.2: Send and Receive Data in loops */
time_old = getTime();
iterationStep = 1;
for (;;)
{
recvStatus = recv(TCPClient, recvBuffer,128,0);
if(recvStatus == 0)
break;
else if(recvStatus == SOCKET_ERROR)
{
printf("Failed in recv(): %d\n",WSAGetLastError());
break;
}
recvBuffer[recvStatus] = 0x00; /* '\0' */
time_new = getTime();
time_interval = time_new - time_old;
time_old = time_new;
printf("Step = %5d; Time Interval = %8.6f; Received String: %s\n", iterationStep,time_interval,recvBuffer);
iterationStep++;
}
/* if "EXIT" received, terminate the program */
if (!strcmp(recvBuffer,"EXIT"))
{
printf("TCP Server ready to terminate.");
break;
}
}
编辑2:
我正在尝试使用此方法,但遇到了一些麻烦。我创建了这种方法:
private static void SendRequest(Object source, ElapsedEventArgs e) {
byte[] buffer = Encoding.Default.GetBytes("WAAAAT");
acc.Send(buffer, 0, buffer.Length, 0);
}
但是如您所见,我无法使用“ acc”套接字,因为可以将其设置为参数。我尝试过,但是随后在调用该方法时出现很多错误,有什么建议吗?
听起来您需要每秒使用“ System.Timers.Timer”类来执行“发送请求”功能。
例子:
static void Main()
{
// Create a timer with a one second interval.
aTimer = new System.Timers.Timer(1000);
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += SendRequest;
aTimer.Enabled = true;
}
private static void SendRequest(Object source, ElapsedEventArgs e)
{
// maybe end existing request if not completed?
// send next request
}
在启动一个新请求之前是否超时(取消)任何现有请求都将取决于您的要求,因为也有可能并行运行许多请求。如果确实需要终止请求,则可以通过处置启动连接尝试的System.Net.Sockets.Socket来实现(您将需要处理Socket.Connect引发的任何错误)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句