Я использую Nektra Deviare для вызова вызовов метода Winsock. Моя идея - научиться также отправлять сообщения через один и тот же сокет, чем исходное приложение. Так что я делаю, когда обнаруживаю первый вызов для отправки сообщения, я сохраняю идентификатор сокета (первый аргумент функции отправки), поэтому я могу использовать его позже.
Итак, вот мой код:
uint socket = 0;
[DllImport("Ws2_32.dll")]
private static extern int send(uint socket, string buf, int len, int flags);
void _proxy_OnFunctionCalled(DeviareTools.IProcess proc, DeviareParams.ICallInfo callInfo, Deviare.IRemoteCall rCall)
{
socket = (uint)callInfo.Params.get_Item(0).Value;
}
и позже
int ret = send(socket, "ABC", 3, 0);
MessageBox.Show(ret.ToString());
Это последнее сообщение появляется всегда -1. Почему это должно быть?
Спасибо
edit: вызов WSAGetLastError() возвращает 2. Которое я не знаю, что это значит, поскольку оно не похоже на msdn.
Попробуйте сделать
MessageBox.Show(socket.ToString());
и убедитесь, что ваша переменная сокета установлена.
Я считаю, что ошибка 2 - это "файл не найден", который подскажет мне, что у вас есть недопустимый идентификатор сокета, но я мог ошибаться в этом.
Возможно, это немного поздно, но проблема в том, что вы пытаетесь использовать сокет, созданный в другом процессе. Используя Deviare, вы получаете идентификатор сокета из одного процесса, и вы пытаетесь использовать его в своем процессе. Это не работает, потому что идентификаторы сокетов действительны только в том процессе, в котором они были созданы.
WinSock должен быть инициализирован, необходимо создать сокет, необходимо установить соединение (если ваш сокет не является SOCK_DGRAM), так что вы можете отправить() что угодно. Кроме того, функции API предназначены для работы с данными из указателей (char *), гарантируя, что это происходит. Возможно, "ABC" объявляется как массив WIDECHAR, объект String или что-то вроде буфера (char *).
Здесь присутствует полный пример базового соединения сокетов в MSDN: http://msdn.microsoft.com/en-us/library/ms737625(VS.85).aspx