C#

A collection of 2 posts

C#

C#使用HttpClient时正确导入客户端证书

项目需要使用.Net调用api,并且需要使用客户端证书,上网搜了一圈,按照搜到的方法导入: //配置HttpClient选项 var clientHandler = new HttpClientHandler(); //使用客户端证书 clientHandler.ClientCertificateOptions = ClientCertificateOption.Manual; clientHandler.ClientCertificates.Add(new X509Certificate2("client.crt.pem")); var client = new HttpClient(clientHandler); 但是印象中使用客户端证书需要有私钥,代码里并没有涉及私钥,调用也果然出错了,于是把添加的语句改成了: clientHandler.ClientCertificates.Add(X509Certificate2.CreateFromPemFile( "client.crt.pem", "client.key.pem" )); 结果还是报错:

C#

C#实时判断Socket客户端的连接状态

C#的Socket.Connected属性,返回的是上次IO操作时的连接状态。如果之后连接被断开,访问这个属性依然会返回true,因此不能使用这个属性来判断实时连接状态。 C#还提供了一个Poll(int microSeconds, SelectMode mode)方法。如果mode参数定义为SelecMode.SelectRead时,这个方法在以下情况下会返回true: * 调用了Listen(即Socket处于监听模式)并且有挂起的连接 * 有数据可以读取 * 连接被关闭、重置或终止 因此,在客户端模式下,调用Socket.Poll(timeout, SelectMode.SelectRead),会出现以下结果: * 如果连接没有断开,并且没有数据等待接收(即Socket.Available == 0) ,返回false * 如果连接没有断开,并且有数据等待接收,返回true * 如果连接已断开,返回true 所以,进行以下判断: