Действительно любите большинство банков, делают, локаут имя пользователя/учетная запись после X отказов входа в систему. Но я не был бы так же строг как банк, в котором необходимо призвать для разблокирования учетной записи. Я просто сделал бы временную блокировку из 1-5 минут. Если, конечно, веб-приложение не как данные, чувствительные как банк.:)
x <- 1/3
plot(1,type="none",ann=FALSE)
## text and values only
text(mean(par("usr")[1:2]),mean(par("usr")[3:4])-par("cxy")[2]*2,
paste("z = ",round(x,2)))
## text, values, and mathematical expressions
text(mean(par("usr")[1:2]),mean(par("usr")[3:4]),
bquote(x^2==.(round(x,2))))
text(mean(par("usr")[1:2]),mean(par("usr")[3:4])-par("cxy")[2],
substitute(gamma==value,list(value=round(x,2))))
вы должны иметь привычку проверять наличие IDisposable
; например (все еще включая ваш журнал ошибок):
using(TcpClient tcpClient = new TcpClient()) {
try {
tcpClient.Connect("localhost", serverPort);
StreamWriter writer = new StreamWriter(tcpClient.GetStream(), Encoding.UTF8);
writer.AutoFlush = true;
writer.WriteLine("login>user,pass");
writer.WriteLine("print>param1,param2,param3");
} catch (Exception ex) {
Console.Error.WriteLine(ex.ToString());
}
}
В то время как код вашего сервера настроен на чтение только одной строки за соединение. Вы' Мне понадобится еще одна попытка прочитать все отправляемые строки. Я думаю, что как только этот поток настроен на стороне клиента, он отправит все данные. Затем на стороне сервера ваш поток фактически читает только одну строку из этого конкретного потока.