Итак, я пытаюсь подключиться к серверу, используя сокет C #, но я столкнулся с этой ошибкой:
System.Net.Internals.SocketExceptionFactory + ExtendedSocketException: Une предварительное получение доступа к un socket de manièreinterdite par ses autorisations d'accès a été tentée 192.168.1.17:9999
(!! Извините, не знаю, как поставить visual studio на английском языке)
Вот мой код
Socket sock;
public MainPage()
{
this.InitializeComponent();
// Initialize MyRecognizer and Load Grammar
connectToYanaForAll("192.168.1.17", 9999);
sendInfoToYanaSocket(sock);
//createGrammarFromYana(sock);
disconnectFromYana(sock);
}
public void sleep(long millis) { Stopwatch stopwatch = Stopwatch.StartNew(); while (true) { if (stopwatch.ElapsedMilliseconds >= millis) { break; } } }
public void connectToYanaForAll(String ip, int port)
{
IPAddress ipAddress = IPAddress.Parse(ip); //ipHostInfo.AddressList[0];
IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);
// Create a TCP/IP socket.
sock = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp); <-- Fail at this line
sock.Connect(remoteEP);
}
public void disconnectFromYana(Socket sock)
{
sock.Shutdown(SocketShutdown.Both);
sock = null;
}
public void sendInfoToYanaSocket(Socket sock)
{
String infos = "{\"action\":\"client_infos\",\"type\":\"listen\",\"version\":\"2\",\"location\":\"bureau\",\"token\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"}<EOF>";
byte[] msg = Encoding.ASCII.GetBytes(infos);
int bytesSent = sock.Send(msg);
Debug.WriteLine(String.Join(bytesSent.ToString()," bytes sent!"));
}
public void createGrammarFromYana(Socket sock)
{
String infos = "{\"action\":\"GET_SPEECH_COMMANDS\"}<EOF>";
byte[] msg = Encoding.ASCII.GetBytes(infos);
int bytesSent = sock.Send(msg);
Debug.WriteLine(String.Join(bytesSent.ToString(), " bytes sent!"));
sleep(200);
byte[] bytes = new byte[4096];
int bytesRec = sock.Receive(bytes);
Debug.WriteLine(String.Join("Received: ", bytesRec.ToString(), " bytes!"));
Debug.WriteLine("Text = {0}",Encoding.ASCII.GetString(bytes, 0, bytesRec));
}
Я знаю, что вам нужно право администратора для использования необработанного сокета, но я использую stream socket
, поэтому я немного застрял.(Кстати, я использую Visual studio 2017) То, что я пробовал:
- Полностью отключить брандмауэр: не работает
- Полностью отключить антивирус: не работает
- Чтобы использовать
TcpClient client = new TcpClient();
класс: не работает