0

我正在使用 MSWinsock 库套接字创建一个 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。

4

3 回答 3

0

检查端口是否已被使用

var properties = IPGlobalProperties.GetIPGlobalProperties();
var used =
    properties.GetActiveTcpListeners().Select(tcp => tcp.Port)
    .Concat(properties.GetActiveTcpConnections().Select(tcp => tcp.LocalEndPoint.Port))
    .Any(port => port == 1232);
于 2013-09-19T15:27:47.940 回答
0

我认为问题出在:winsock[0].Bind(1232, "127.0.0.1"); 看起来您只能访问来自 127.0.0.1 的连接。

尝试使用: 0.0.0.0 代替。 IP地址.Any


我从来没有用winsock做过socketlistening,我在这里做了一个异步例子: httpSocket : //csharp.vanlangen.biz/network-programming/async-sockets/easysocketlistener/

于 2013-09-19T15:21:51.677 回答
0

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

  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++;
}
于 2013-11-13T15:26:00.170 回答