求助,问题是这样的
我做了个小程序,实现客户端传数据到服务器的。客户端从DATAGRIDVIEW中循环发数据给服务器端,用的是while,如果我在其中加个断点,那么,程序传数据基本正常,但是如果我不加断点,那么,当传完第一条时就一定会在这个位置Application.Run(new SocketTransmission());出“未将对象引用设置到对象的实例”。愁啊,哪位高人能帮我解答一下,急啊!!!!!
我做了个小程序,实现客户端传数据到服务器的。客户端从DATAGRIDVIEW中循环发数据给服务器端,用的是while,如果我在其中加个断点,那么,程序传数据基本正常,但是如果我不加断点,那么,当传完第一条时就一定会在这个位置Application.Run(new SocketTransmission());出“未将对象引用设置到对象的实例”。愁啊,哪位高人能帮我解答一下,急啊!!!!!
服务端接开个线程收到数据后,,接受了就给其他线程处理等...同时接收数据时判断数据大小等
这个是启动程序吧你窗口在load的时候就开始发?而且还while ?你没有得到确切的报错的代码行你另外起线程做的吗?用socket的人往往会考虑用多线程,而多线程编程却总是不能好好管理共享数据,所以经常出现错误,却总认为与socket有关,其实不然。
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;
}
}
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);
}
}如果真是那个问题的话,你看看这个方法可以解决不?
“binddate(); ///由于是从一个数据库取出的数据,所以我放到了datagridView里"
发送消息,然后在消息接收函数里就可以用我写的这段代码了。
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;
}
这是另外两个函数,看看是不是有什么其它有问题??