C# MSWinsock 库套接字 - 无法连接

本文关键字:连接 套接字 MSWinsock | 更新日期: 2023-09-27 18:31:55

我正在使用MSWinsock Library Sockets创建一个C#应用程序。我设置了一切正确(我有 80% 的把握),但每次我的冲击波/闪光灯播放器都说没有连接。

class Program
{
    static Winsock[] winsock;
    static int currentId;
    static void Main(string[] args)
    {
        winsock = new Winsock[10000];
        winsock[0] = new Winsock();
        winsock[0].Bind(1232, "127.0.0.1");
        winsock[0].Listen();
        winsock[0].ConnectionRequest += new DMSWinsockControlEvents_ConnectionRequestEventHandler(Program_ConnectionRequest);
        currentId = 0;
        Console.WriteLine("MSWinsock server online, port {0}!", winsock[0].LocalPort);
        while (true) Console.ReadLine();
    }
    static void Program_ConnectionRequest(int requestID)
    {
        winsock[currentId] = winsock[0];
        winsock[currentId].Accept(requestID);
        Console.WriteLine("New connection from {0}!", winsock[currentId].RemoteHost);
        currentId++;
    }
}

这种方法就像我在 VB6 中所做的一样。我不想使用System.Net.Sockets,因为我想使用Winsock(用于更改)。

我做错了什么?我很好奇为什么它说它无法连接到 IP 127.0.0.1 和端口 1232。

C# MSWinsock 库套接字 - 无法连接

检查端口是否已在使用中

var properties = IPGlobalProperties.GetIPGlobalProperties();
var used =
    properties.GetActiveTcpListeners().Select(tcp => tcp.Port)
    .Concat(properties.GetActiveTcpConnections().Select(tcp => tcp.LocalEndPoint.Port))
    .Any(port => port == 1232);

我认为问题出在这里:winsock[0]。绑定(1232, "127.0.0.1");看起来您只能从 127.0.0.1 访问连接。

请尝试改用:0.0.0.0。 IPAddress.any


我从来没有用 winsock 做过套接字监听,我在这里用Socket做了一个异步示例:http://csharp.vanlangen.biz/network-programming/async-sockets/easysocketlistener/

在这一部分代码中,您忘记了一行:

  static void Program_ConnectionRequest(int requestID)
{
    winsock[currentId] = winsock[0];
    if(winsock[currentId].CtlState!=0) winsock[currentId].Close(); //Forgotten row
    winsock[currentId].Accept(requestID);
    Console.WriteLine("New connection from {0}!", winsock[currentId].RemoteHost);
    currentId++;
}