我正在使用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。
答案 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++;
}