当前位置:编程学习 > C#/ASP.NET >>

我想C#实现端口复用,百度上的根本就不好使。

我想实现的是用C#创建socket套接字,然后可以对80端口进行复用。大概实现的功能就是,如果有人访问我的网站,我用一个程序劫持80端口并获取对方机器的IP地址,然后将IP地址存到数据库里,但是现在数据可以存,就是无法劫持我机器上的80端口。百度上的是添加:socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);语句,这根本没用,报错如下:以一种访问权限不允许的方式做了一个访问套接字的尝试。 求大牛们给我一个思路来完成这个项目。拜托了。看到VC可以通过socket家族里的东西实现这个功能,但是不明白原理。新人,没多少分。 --------------------编程问答-------------------- 不明白要实现什么功能


--------------------编程问答-------------------- 80端口已经被系统征用了,要复用的前提是启用80端口时允许复用,否则还是白搭。你可以把系统使用的80端口(IIS在用)先释放出来给你的程序试试用。 --------------------编程问答--------------------
引用 1 楼  的回复:
不明白要实现什么功能

就是同时运行IIS上网站的同时,我再用一个程序运行在80端口上,目的是收集客户的IP信息,然后存入数据库,我想用 端口复用的方法来实现。百度上的资料我试了,还是提示“以一种访问权限不允许的方式做了一个访问套接字的尝试。”,说端口被占用。我现在想找一种方法可以进行端口复用。 --------------------编程问答--------------------
引用 2 楼  的回复:
80端口已经被系统征用了,要复用的前提是启用80端口时允许复用,否则还是白搭。你可以把系统使用的80端口(IIS在用)先释放出来给你的程序试试用。

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端口启动不?估计够呛。还是试一下先。 --------------------编程问答--------------------
引用 6 楼  的回复:
看看你的程序启动后,IIS还能用80端口启动不?估计够呛。还是试一下先。

启动不了啊,所以头疼呢么。我就想让它俩同时运行。怎么搞啊?头疼死了! --------------------编程问答-------------------- Listener.ExclusiveAddressUse = false;
Listener.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);  --------------------编程问答--------------------
引用 8 楼  的回复:
Listener.ExclusiveAddressUse = false;
Listener.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

我要把它的监听方式换成TcpListener?  --------------------编程问答-------------------- --------------------编程问答-------------------- 你的代码:Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Listener是Socket的一个实例 --------------------编程问答--------------------
引用 11 楼  的回复:
你的代码: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监听端口) --------------------编程问答--------------------
引用 13 楼  的回复:
socket设置端口复用三个条件:
1.率先监听的socket设置ExclusiveAddressUse 为false;
2.后来监听的socket设置ExclusiveAddressUse 为false;
3.后来监听的socket设置SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true……

如果是那样,有没有别的解决方法? --------------------编程问答-------------------- 暂时没想到。抓包?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,