Что означает "Либо приложение не вызвало WSAStartup, либо произошел сбой WSAStartup"?
Я пытаюсь разработать программное обеспечение, которое подключается к веб-серверу через сеть; все работает нормально, пока не попробую использовать ключ для защиты моего программного обеспечения. Мой ключ имеет некоторые сетевые функции, и его API работает в сетевой инфраструктуре. Когда я добавил код проверки ключа в свою программу, я получил эту ошибку:
"Either the application has not called WSAStartup, or WSAStartup failed"
Я поставил блок кода, который выдает исключение. Сценарий, который я получил за исключением: Я вошел в программу (все работает нормально), затем отключил ключ, затем программа остановилась и попросила ключ, и я снова подключил ключ и попытался войти, но я получил исключение в сети
response = (HttpWebResponse)request.GetResponse();
DongleService unikey = new DongleService();
checkDongle = unikey.isConnectedNow();
if (checkDongle)
{
isPass = true;
this.username = txtbxUser.Text;
this.pass = txtbxPass.Text;
this.IP = combobxServer.Text;
string uri = @"https://" + combobxServer.Text + ":5002num_events=1";
request = (HttpWebRequest)WebRequest.Create(uri);
request.Proxy = null;
request.Credentials = new NetworkCredential(this.username, this.pass);
ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
response = (HttpWebResponse)request.GetResponse();
Properties.Settings.Default.User = txtbxUser.Text;
int index = _servers.FindIndex(p => p == combobxServer.Text);
if (index == -1)
{
_servers.Add(combobxServer.Text);
Config_Save.SaveServers(_servers);
_servers = Config_Save.LoadServers();
}
Properties.Settings.Default.Server = combobxServer.Text;
// also save the password
if (checkBox1.CheckState.ToString() == "Checked")
Properties.Settings.Default.Pass = txtbxPass.Text;
Properties.Settings.Default.settingLoginUsername = this.username;
Properties.Settings.Default.settingLoginPassword = this.pass;
Properties.Settings.Default.settingLoginPort = "5002";
Properties.Settings.Default.settingLoginIP = this.IP;
Properties.Settings.Default.isLogin = "guest";
Properties.Settings.Default.Save();
response.Close();
request.Abort();
this.isPass = true;
this.Close();
}
else
{
MessageBox.Show("Please Insert Correct Dongle!", "Dongle Error", MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
1 ответ
WSAStartup - это первая функция из библиотеки сокетов, которая запускается при начале работы с сетью. Вы можете импортировать
[DllImport("ws2_32.dll", CharSet = CharSet.Auto, SetLastError=true)]
static extern Int32 WSAGetLastError();
и когда возникнет исключение, тогда выполните WSAGetLastError и посмотрите коды ошибок здесь. Надеюсь, это поможет вам. В конкретном случае, когда вы получаете Win32Exception, вы можете использовать NativeErrorCode из исключения, как написано в комментариях Patrick.