求助,问题是这样的
我做了个小程序,实现客户端传数据到服务器的。客户端从DATAGRIDVIEW中循环发数据给服务器端,用的是while,如果我在其中加个断点,那么,程序传数据基本正常,但是如果我不加断点,那么,当传完第一条时就一定会在这个位置Application.Run(new SocketTransmission());出“未将对象引用设置到对象的实例”。愁啊,哪位高人能帮我解答一下,急啊!!!!!

解决方案 »

  1.   

    是不是你后续发送的数据影响到了,服务器的处理,你的while一直在发送数据
    服务端接开个线程收到数据后,,接受了就给其他线程处理等...同时接收数据时判断数据大小等
      

  2.   

    Application.Run(new SocketTransmission());
    这个是启动程序吧你窗口在load的时候就开始发?而且还while ?你没有得到确切的报错的代码行你另外起线程做的吗?用socket的人往往会考虑用多线程,而多线程编程却总是不能好好管理共享数据,所以经常出现错误,却总认为与socket有关,其实不然。
      

  3.   

    是啊,我增加了服务器判断,应该就是这块出的毛病,大家帮我看看
    while (!eroo)
                    {                    if (socketer.TransferSendText(txtSinkIP.Text, "8888", "SENDTEXT", sentextstr, CmdParms) == "OK")//如果服务器反回的是OK则代表接收正确,然后在发再一数据
                        {
                            string strsql = "update 送样主表 set zt='1' where 实验编号='" + gd + "'";
                           con.Open();                  
                            SqlCommand cmd = new SqlCommand(strsql, con);
                            if (cmd.ExecuteNonQuery() > 0)
                            {                        }
                            else
                            {
                                MessageBox.Show("与本地数据库交互出错,请重试!", "提示");
                                eroo = true; 
     
                            }
                            con.Close();                        txtReceive.Text += "OK"+ "\r\n";
                            binddate();  ///由于是从一个数据库取出的数据,所以我放到了datagridView里   
                            sentextstr = sendDATA();//这是从datagridView取出我要的值,并赋给字符串
                            if (sentextstr == "NO")//如果反回的是NO,则表示无新数据
                            {
                                eroo = true;
                                break;
                            }                    }
                        else
                        {
                            MessageBox.Show(socketer.TransferSendText(txtSinkIP.Text, "8888", "SENDTEXT", sentextstr, CmdParms), "提示");
                            eroo = true; 
                        }
                    }
      

  4.   

    如果用了多线程的话应该是资源共享的问题,你Realse一个版本试试,如果在Realse版本中能运行说明就是你资源共享出了问题。
      

  5.   


            delegate void AccessOutThreadControl(DataTable dt);
            private void setDgrBind(DataTable dtBind)
            {
                if (this.dgrItems.InvokeRequired)
                {
                    AccessOutThreadControl setCallBack = new AccessOutThreadControl(setDgrBind);
                    this.Invoke(setCallBack, new object[] {dtBind.Copy()});
                }
                else
                {
                    this.dgrItems.Panel_Init(dtBind);
                }
            }如果真是那个问题的话,你看看这个方法可以解决不?
      

  6.   


    “binddate();  ///由于是从一个数据库取出的数据,所以我放到了datagridView里"
    发送消息,然后在消息接收函数里就可以用我写的这段代码了。
      

  7.   

    是这样的朋友,我是人这个GRIDVIEW里分别取出一些字会段的内容,然后组合到一起,最后反回程序的,接收端只是接收一个字符串而已.所以我觉得应该还是发送端有问题,
            public void binddate()
            {
             //   SqlConnection con = new SqlConnection("server=192.168.1.18;database=zljcjd1211;uid=sa;pwd=tt84817848");
                con.Open();
                SqlDataAdapter sda = new SqlDataAdapter();
                DataSet ds = new DataSet();
             //   sda.SelectCommand = new SqlCommand("SELECT 实验编号, 实验名称, 实验日期, 送样编号, 工程编号, 工程名称, 委托单位, 合格, 合格2, lpdate,用户单位,zt FROM 送样主表 where zt='0'", con);
                sda.SelectCommand = new SqlCommand("SELECT 实验编号, 实验名称, 工程名称, 合格,zt FROM 送样主表 where zt='0'", con);
                sda.Fill(ds);
                ds.Tables[0].TableName = "admin";            DataView dview = new DataView();
                dview.Table = ds.Tables["admin"];
                dataGridView1.DataSource = dview;
                con.Close();        }
     public string sendDATA()
            {
              //  string a, b, c, d, f, g, h;            h = "";
                g = "";            if (dataGridView1.RowCount > 0)
                {
                    gd = this.dataGridView1.Rows[0].Cells[0].Value.ToString();
                    a = gd+"0xbh";//实验编号
                    b = this.dataGridView1.Rows[0].Cells[1].Value.ToString()+"0xmc";//实验名称
                    c = this.dataGridView1.Rows[0].Cells[2].Value.ToString()+"0xgcmc";//工程名称
                    d = this.dataGridView1.Rows[0].Cells[3].Value.ToString()+"0xhg";//合格
                    f = "哈尔滨科世隆科技开发有限公司"+"0xdw";  //  单位          
                    g = g + b + a + c + d + f;             }
                else
                {
                    MessageBox.Show("无新数据!", "提示");
                    g = "NO";
                }
                return g;
            }
    这是另外两个函数,看看是不是有什么其它有问题??