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。
检查端口是否已在使用中
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++;
}