C# TCPClient:无法建立连接,因为目标计算机主动拒绝它
试图将网络流写入套接字,但出现以下错误:C# TCPClient:无法建立连接,因为目标计算机主动拒绝它,c#,sockets,tcpclient,zebra-printers,C#,Sockets,Tcpclient,Zebra Printers,试图将网络流写入套接字,但出现以下错误: No connection could be made because the target machine actively refused it 应用程序有一个并发的打印作业列表,所以当我们有一些东西要打印时,检查tcp客户端是否已连接,如果未连接,则获取流、写入流和刷新 示例代码如下所示: /// <summary> Print via TCP </summary> private void PrintViaTcp(obj
No connection could be made because the target machine actively refused it
应用程序有一个并发的打印作业列表,所以当我们有一些东西要打印时,检查tcp客户端是否已连接,如果未连接,则获取流、写入流和刷新
示例代码如下所示:
/// <summary> Print via TCP </summary>
private void PrintViaTcp(object a)
{
Debug.WriteLine($"Printing via TCP...");
var labelData = a as LabelData;
// Send data to the label printer
SendToLabelPrinter(labelData.Commands, labelData.PrinterAddress, labelData.Port);
Debug.WriteLine(" -> Printed labelId : {0}", labelData.LabelId);
}
/// <summary> Send the native command to the label printer </summary>
public void SendToLabelPrinter(string commands, string address, int? port)
{
//Connect to tcp client if a connection does not exist
if (!TcpClient.Connected) TcpClient.Connect(address, port ?? 9100);
//Get the network stream
var stream = TcpClient.GetStream();
// Send command strings to printer
//stream.Write(Encoding.ASCII.GetBytes(commands), 0, commands.Length);
stream.Write(Encoding.GetEncoding(850).GetBytes(commands), 0, commands.Length);
//Flush the buffer on the network stream
stream.Flush();
}
///通过TCP打印
私有void PrintViaTcp(对象a)
{
Debug.WriteLine($“通过TCP打印…”);
var labelData=a作为labelData;
//将数据发送到标签打印机
SendToLabelPrinter(labelData.Commands、labelData.PrinterAddress、labelData.Port);
Debug.WriteLine(“->打印的labelId:{0}”,labelData.labelId);
}
///将本机命令发送到标签打印机
public void sendtolablprinter(字符串命令、字符串地址、int?端口)
{
//如果连接不存在,请连接到tcp客户端
如果(!TcpClient.Connected)TcpClient.Connect(地址,端口?9100);
//获取网络流
var stream=TcpClient.GetStream();
//将命令字符串发送到打印机
//stream.Write(Encoding.ASCII.GetBytes(commands),0,commands.Length);
stream.Write(Encoding.GetEncoding(850).GetBytes(commands),0,commands.Length);
//刷新网络流上的缓冲区
stream.Flush();
}
这适用于小型打印作业<100个打印,但当我超过100个打印时,错误会随机出现缺少的打印。分析和查找随机出现的TCP或网络问题的根本原因的最佳方法是开始查看Wireshark,它可以提供更多关于发送内容以及其间如何拒绝连接的信息 同样在您的代码中,TCPClient上没有超时设置。当发送或接收更多数据量时,请尝试设置更高的
**超时**
设置。。这可能是问题所在。再次使用wireshark,您将了解连接是如何关闭的以及是谁发起的所有细节。。只需寻找鳍旗
网络堆栈一次可以处理一个连接,并且可以在开始拒绝连接之前将8个左右的连接排队。如果您向它发送了许多单独的连接请求,则需要说明拒绝的原因,并在打印机能够处理该请求之前退出 另一个选项是创建一个将所有打印作业发送到的打印处理程序 当第一个请求打开连接到打印机时。 当新请求进来时,将它们添加到队列中。
如果一分钟内未使用连接,请关闭连接。这似乎是并发问题。您应该检查打印机服务器可以处理多少并发作业