我在计算机和服务器之间的 Socket 通信上有问题。发生的情况是,仅当我单击特定按钮时,我才通过套接字建立通信。在第一次沟通中,一切都发生得很完美。如果我再次单击,则不会执行代码。我放了一个断点来查看发生了什么,当我尝试连接到服务器时,发现出现以下错误
Cannot access a disposed object. Object name: 'System.Net.Sockets.TcpClient'.
因此,为了再次工作,我关闭客户端应用程序并再次打开,然后正常工作。
我想要什么 我有一个只能在 FireFox 上运行的 Web 应用程序。我有一台打印机,我需要通过 DLL 访问他,所以我制作了一个客户端应用程序,通过 Socket 与这个 Web 应用程序连接。我通过流传递一些参数并在客户端应用程序中恢复这些参数,然后打印。
在我的 Web 应用程序代码中
public void btnImprimeBematech_Venda()
{
Utilidade.QuebraToken tk = new Utilidade.QuebraToken();
int Credenciada = Convert.ToInt32(tk.CarregaToken(1, HttpContext.Current.Request.Cookies["token"].Value));
TcpListener serverSocket = new TcpListener(8852);
int requestCount = 0;
TcpClient clientSocket = default(TcpClient);
serverSocket.Start();
while (true)
{
clientSocket = serverSocket.AcceptTcpClient();
requestCount = 0;
while (clientSocket.Connected == true)
{
try
{
requestCount = requestCount + 1;
NetworkStream networkStream = clientSocket.GetStream();
string serverResponse = Request.QueryString["id"].ToString() + ";" + Credenciada.ToString() + ".";
Byte[] sendBytes = Encoding.ASCII.GetBytes(serverResponse);
networkStream.Write(sendBytes, 0, sendBytes.Length);
networkStream.Flush();
}
catch (Exception ex)
{
}
}
}
clientSocket.Close();
serverSocket.Stop();
}
我通过流传递一个字符串,并在客户端应用程序中恢复。
客户端应用程序代码
`System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient();`
private void Form1_Load(object sender, EventArgs e)
{
clientSocket.Connect("server_ip", 8852);
this.imprimir();
}
private void button3_click(object sender, EventArgs e)
{
if (clientSocket.Connected == false)
clientSocket.Connect("server_ip", 8852);
this.imprimir();
}
protected void imprimir()
{
NetworkStream serverStream = clientSocket.GetStream();
byte[] inStream = new byte[10025];
serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize);
string returndata = System.Text.Encoding.ASCII.GetString(inStream);
int ponto = returndata.IndexOf('.');
returndata = returndata.Substring(0, ponto);
string[] quebraretorno = returndata.Split(';');
ServiceReference1.bematechSoapClient bema = new ServiceReference1.bematechSoapClient();
string r = bema.InformacoesImovelBematech(quebraretorno[0], quebraretorno[1]);
int retorno = -1;
retorno = IniciaPorta("COM7");
if (retorno == 1)
{
ConfiguraModeloImpressora(7);
BematechTX(r);
AcionaGuilhotina(1);
FechaPorta();
}
clientSocket.Close();
}
每次我的用户单击我的 Web 应用程序上的特定按钮时,我都需要它,打电话给我btnImprimeBematech_Venda()
,然后与我的客户端应用程序交谈以进行打印。现在,每当我的用户单击我的按钮进行打印时,我都需要关闭客户端应用程序并再次打开。
我不太了解,Thread
但也许我需要使用它。我不知道。
有人可以帮助我吗?