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

时间:2013-09-19 15:12:16

标签: c# winsock

我正在使用MSWinsock库套接字创建一个C#应用程序。我设置的一切都是正确的(我80%肯定),但每次我的shockwave / flash播放器说没有连接。

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。

3 个答案:

答案 0 :(得分:0)

我认为问题在于: winsock [0]。绑定(1232,“127.0.0.1”); 看起来你只能访问127.0.0.1的连接。

尝试使用:0.0.0.0代替。 IPAddress.Any


我从未使用winsock完成socketlistening,我在这里使用Socket创建了一个异步示例: http://csharp.vanlangen.biz/network-programming/async-sockets/easysocketlistener/

答案 1 :(得分: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);

答案 2 :(得分: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++;
}