我想C#实现端口复用,百度上的根本就不好使。
我想实现的是用C#创建socket套接字,然后可以对80端口进行复用。大概实现的功能就是,如果有人访问我的网站,我用一个程序劫持80端口并获取对方机器的IP地址,然后将IP地址存到数据库里,但是现在数据可以存,就是无法劫持我机器上的80端口。百度上的是添加:socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);语句,这根本没用,报错如下:以一种访问权限不允许的方式做了一个访问套接字的尝试。 求大牛们给我一个思路来完成这个项目。拜托了。看到VC可以通过socket家族里的东西实现这个功能,但是不明白原理。新人,没多少分。 --------------------编程问答-------------------- 不明白要实现什么功能--------------------编程问答-------------------- 80端口已经被系统征用了,要复用的前提是启用80端口时允许复用,否则还是白搭。你可以把系统使用的80端口(IIS在用)先释放出来给你的程序试试用。 --------------------编程问答--------------------
就是同时运行IIS上网站的同时,我再用一个程序运行在80端口上,目的是收集客户的IP信息,然后存入数据库,我想用 端口复用的方法来实现。百度上的资料我试了,还是提示“以一种访问权限不允许的方式做了一个访问套接字的尝试。”,说端口被占用。我现在想找一种方法可以进行端口复用。 --------------------编程问答--------------------
IIS停止后,我的程序可以用。但是我想让它俩同时进行啊。 --------------------编程问答-------------------- 测试代码如下:
namespace PortListen
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Socket Listener;
private IPEndPoint localPort;
private void Form1_Load(object sender, EventArgs e)
{
localPort = new IPEndPoint(IPAddress.Any, 80);//监听80端口
}
private void button1_Click(object sender, EventArgs e)
{
Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Listener.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); //同意 端口复用 加上和不加都一个效果,都报“以一种访问权限不允许的方式做了一个访问套接字的尝试。”
Listener.Bind(localPort);
Listener.Listen(100);
listBox1.Items.Add("80端口监听成功!");
// AcceptState state = new AcceptState();
//state.socket = Listener;
//state.socketName = "Listener";
/* Type_Listen Listen_tc = new Type_Listen();
Listen_tc.IP = ((IPEndPoint)this.Listener.RemoteEndPoint).Address.ToString();
Model.GetIpAddress.Add(Listen_tc);
this.listBox1.Items.Add(Listen_tc.IP);*/
//Listener.BeginAccept(new AsyncCallback())
}
public class AcceptState
{
public Socket socket;
public string socketName;
}
}
} --------------------编程问答-------------------- 看看你的程序启动后,IIS还能用80端口启动不?估计够呛。还是试一下先。 --------------------编程问答--------------------
启动不了啊,所以头疼呢么。我就想让它俩同时运行。怎么搞啊?头疼死了! --------------------编程问答-------------------- Listener.ExclusiveAddressUse = false;
Listener.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); --------------------编程问答--------------------
我要把它的监听方式换成TcpListener? --------------------编程问答-------------------- --------------------编程问答-------------------- 你的代码:Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Listener是Socket的一个实例 --------------------编程问答--------------------
还是原来的错误,说端口占用,就算我先启动监听程序那么IIS也无法启动。 --------------------编程问答-------------------- socket设置端口复用三个条件:
1.率先监听的socket设置ExclusiveAddressUse 为false;
2.后来监听的socket设置ExclusiveAddressUse 为false;
3.后来监听的socket设置SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true)
作为后来监听的socket,如果已设置这两个选项还无法监听的话,我想是因为先前的socket(就是你说的iis)执行了ExclusiveAddressUse=true(只允许一个socket监听端口) --------------------编程问答--------------------
如果是那样,有没有别的解决方法? --------------------编程问答-------------------- 暂时没想到。抓包?
补充:.NET技术 , C#