C# 套接字创建错误



所以我试图使用 C# 套接字连接到服务器,但我遇到了这个错误:

System.Net.Internals.SocketExceptionFactory+ExtendedSocketException: Une tentative d'accès à un socket de manière interdite par ses Autorisations d'accès a été tentée 192.168.1.17:9999

(!!抱歉不知道如何将视觉工作室用英语(

这是我的代码

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();类:不起作用

根据谷歌翻译,错误消息说: "尝试访问其访问权限禁止的套接字 192.168.1.17:9999">

所以看起来仍然存在权限问题。也许您的系统上运行了仅允许某些已知传出连接的防火墙?

所以解决方案是将该行放入 Package.appxmanifest 中

<Capability Name="privateNetworkClientServer" />

<Capabilities>标签中

尝试将套接字绑定到终结点而不是连接,然后调用 Listen。希望对你有帮助

最新更新