[英]Socket.Bind() throws “Invalid parameters” exception
我正在用Mono開發Linux應用程序,但偶然發現了這一點。 我想創建一個IP套接字以與其他進程進行本地通信,但是Bind方法失敗,並顯示一條無用的消息。 我寫了一個樣本文件來說明這個問題。 這是代碼:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class Test
{
private static EndPoint EP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 23515);
private static Socket Server;
private static void InitServer()
{
Server = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.IP);
Server.Bind(EP);
Server.Listen(1000);
Console.WriteLine("Server started.");
while (true)
{
Console.WriteLine("Waiting for a connection...");
var handler = Server.Accept();
string data = null;
while (true)
{
var bytes = new byte[1024];
int length = handler.Receive(bytes);
data += Encoding.ASCII.GetString(bytes, 0, length);
if (data.IndexOf("<EOF>") > -1)
break;
}
Console.WriteLine("Received message: " + data);
}
}
public static void Main(string[] args)
{
InitServer();
}
}
這是異常消息:
Unhandled Exception:
System.Net.Sockets.SocketException: Invalid arguments
at System.Net.Sockets.Socket.Bind (System.Net.EndPoint local_end) <0x407e6910 + 0x000ef> in <filename unknown>:0
at Test.InitServer () <0x407bc270 + 0x0006b> in <filename unknown>:0
at Test.Main (System.String[] args) <0x407b9d50 + 0x0000b> in <filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.Net.Sockets.SocketException: Invalid arguments
at System.Net.Sockets.Socket.Bind (System.Net.EndPoint local_end) <0x407e6910 + 0x000ef> in <filename unknown>:0
at Test.InitServer () <0x407bc270 + 0x0006b> in <filename unknown>:0
at Test.Main (System.String[] args) <0x407b9d50 + 0x0000b> in <filename unknown>:0
127.0.0.1
不是Unix端點。 請改用AddressFamily.InterNetwork
。
另外,沒有理由使用原始套接字。 只需使用TcpListener
/ TcpClient
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.