大家好,我在改写一个程序,现在有一个问题要请教:
原来的程序是这样的:public void Send(服务器,端口,信息)
{
using (client = new SendClient);
{
//1、打开端口,验证信息;(Connect)
client.Connect(服务器, 端口);
//2、发送信息;(SendMessage);
client.Send(信息)
//3、关闭端口(Quit)
client.Quit();
}
}在使用的时候,调用Send就可以发送信息,但如果有多条记录,每次都要打开端口、验证信息,发送后关闭端口,大量的时间都花费在了第一步,例如每发送一次信息的时间为15秒的话,第一步就占用了12秒,我现在想将这个函数改写为三个,打开端口并验证后,一条条的发送信息,信息发送完成后再关闭端口,三个函数分别是:
public void Open(服务器,端口)
{
using (client = new SendClient);
{
//打开端口,验证信息;(Connect)
client.Connect(服务器, 端口);
}
}public void SendEx(信息)
{
using (client = new SendClient);
{
//发送信息;(SendMessage);
client.Send(信息)
}
}
public void Close()
{
using (client = new SendClient);
{
//关闭端口(Quit)
client.Quit();
}
}
这样一来,问题就出现了,我在使用时执行Open(服务器,端口)成功,但在执行SendEx(信息)就报错,我试着再执行Close()也不行,后来发现,执行Open(服务器,端口)成功后,这个过程就已经结束了,如果再执行第二步或第三步就会报错,例如我只执行第一、三步(不发送信息,只打开就关闭),将Close()中加入一条client.Connect(服务器, 端口);再client.Qiut()的话,就成功了,但时间也从我就变成了近30秒。
我想请教大家的是,我应该如何处理,才能执行完Open后继续执行SendEx时,可以使用上一个函数打开的端口信息呢?注:因为这段代码是写好后生成为DLL文件,供其他项目调用的,因此没办法直接在代码中写循环发送的。谢谢大家。
原来的程序是这样的:public void Send(服务器,端口,信息)
{
using (client = new SendClient);
{
//1、打开端口,验证信息;(Connect)
client.Connect(服务器, 端口);
//2、发送信息;(SendMessage);
client.Send(信息)
//3、关闭端口(Quit)
client.Quit();
}
}在使用的时候,调用Send就可以发送信息,但如果有多条记录,每次都要打开端口、验证信息,发送后关闭端口,大量的时间都花费在了第一步,例如每发送一次信息的时间为15秒的话,第一步就占用了12秒,我现在想将这个函数改写为三个,打开端口并验证后,一条条的发送信息,信息发送完成后再关闭端口,三个函数分别是:
public void Open(服务器,端口)
{
using (client = new SendClient);
{
//打开端口,验证信息;(Connect)
client.Connect(服务器, 端口);
}
}public void SendEx(信息)
{
using (client = new SendClient);
{
//发送信息;(SendMessage);
client.Send(信息)
}
}
public void Close()
{
using (client = new SendClient);
{
//关闭端口(Quit)
client.Quit();
}
}
这样一来,问题就出现了,我在使用时执行Open(服务器,端口)成功,但在执行SendEx(信息)就报错,我试着再执行Close()也不行,后来发现,执行Open(服务器,端口)成功后,这个过程就已经结束了,如果再执行第二步或第三步就会报错,例如我只执行第一、三步(不发送信息,只打开就关闭),将Close()中加入一条client.Connect(服务器, 端口);再client.Qiut()的话,就成功了,但时间也从我就变成了近30秒。
我想请教大家的是,我应该如何处理,才能执行完Open后继续执行SendEx时,可以使用上一个函数打开的端口信息呢?注:因为这段代码是写好后生成为DLL文件,供其他项目调用的,因此没办法直接在代码中写循环发送的。谢谢大家。
class CSendMsg
{
private bool m_bIsConnected = false;
private SendClient m_Client = null; public bool IsConnected
{
get { return m_bIsConnected; }
private set { m_bIsConnected = value; }
} public bool Connect(string strSvr,int nPort)
{
if (IsConnected)
return IsConnected;
if (null == m_Client)
m_Client = new SendClient();
return IsConnected = m_Client.Connect(strSvr, nPort);
} public void Close()
{
System.Diagnostics.Debug.Assert(null != m_Client);
if (null != m_Client)
m_Client.Close();
IsConnected = false;
} public bool Send(string strMsg)
{
System.Diagnostics.Debug.Assert(null != m_Client);
if (null == m_Client)
return false;
return m_Client.Send(strMsg);
}
}