Я использую Deviare от Nektra, чтобы перехватывать вызовы метода 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());
Этот последний MessageBox является внезапная вверх всегда -1. Почему это должно быть?
Благодаря
редактировать: вызов WSAGetLastError() возвращает 2. Что я не знаю, что это значит, как это, кажется, не появляются на сайте MSDN.
Он имеет некоторое значение, 1564, прямо сейчас. –
Ну, я установил значение сокета на 123 и он выдает ту же ошибку. Странный. Возможно, это связано с тем, что идентификатор сокета недействителен? Я не понимаю почему. –