Отправка на скопированный сокет - PullRequest
0 голосов
/ 19 января 2020

Рассмотрим следующее:

using System.Net;
using System.Net.Sockets;

// ...

private static void AcceptCallback(IAsyncResult AR) {

    Socket socket;
    try {
        socket = serverSocket.EndAccept(AR);
    } catch (ObjectDisposedException) {
        return;
    }

    socketManager.addSocket(socket);
    // ...

}

// ...

Где socketManager() - это объект класса, который я создал для управления сокетами (клиентами). SocketManager также имеет функцию getSocket(), которая в основном возвращает сокет на основе идентификатора. Так что, если я позже сделаю что-то вроде этого:

byte[] data = Encoding.ASCII.GetBytes("Some text to send");
socketManager.getSocket(2).Send(data);

Это никогда не отправит клиенту текст для отправки. Это потому, что я копирую socket, когда делаю socketManager.addSocket(socket);? Как я могу скопировать Socket объекты и при этом иметь возможность использовать их правильно и отправлять сообщения?

1 Ответ

1 голос
/ 19 января 2020

Убедитесь, что объект сокета указывает на конечную точку, напечатав socket.RemoteEndPoint.ToString() Если это нормально, тогда продолжайте, отметив socketManager.getSocket(2).RemoteEndPoint.ToString() Если это не возвращает того же значения, это означает, что вам нужно проверить свой менеджер сокетов , Вы должны передать его по ссылке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...