Клиент на C# с использованием сокетовC#

Место общения программистов C#
Ответить
Anonymous
 Клиент на C# с использованием сокетов

Сообщение Anonymous »

Мне нужно написать простой клиент для чат-сервера, и я хочу одновременно проверять ввод с консоли и из сокета, подключенного к серверу. Вот желаемое поведение в C, и я хочу воспроизвести это поведение в C#:
while (true) {
//make set of descriptors
fd_set reads;
FD_ZERO(&reads);
FD_SET(client_socket, &reads);
FD_SET(0, &reads);
select(client_socket+1, &reads, NULL, NULL, NULL);

//handle user input from stdin
if (FD_ISSET(0, &reads)) {
///
}

//handle message from server
if (FD_ISSET(client_socket, &reads)) {
///
}
}

Я придумал это решение на C#, но не уверен, что оно допустимо и эффективно. Есть ли другие подходы?:
var ongoingTasks = new List {getServerMsg, getUserMsg};

while (true)
{
var finishedTask = await Task.WhenAny(ongoingTasks);
if (finishedTask == getServerMsg) {
OutputServerMsg();
ongoingTasks.Remove(getServerMsg);
getServerMsg = ReceiveMessageFromServer();
ongoingTasks.Add(getServerMsg);
} else if (finishedTask == getUserInput) {
SendMsgToServer();
ongoingTasks.Remove(getUserInput);
getUserInput = ReceiveInputFromStdIn();
ongoingTasks.Add(getUserInput);
}
}


Подробнее здесь: https://stackoverflow.com/questions/782 ... ng-sockets
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»