C#客户端与java服务器如何作SSL socket通讯,有没有能实现的牛人给下代码例程看看
7条回答 默认 最新
- dahe0825 2023-03-17 12:20关注
参考GPT和自己的思路,以下是建立 C# 客户端与 Java 服务器之间的 SSL socket 通讯的详细代码示例:
Java 服务器端代码:
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import javax.net.ssl.SSLServerSocketFactory; import javax.net.ssl.SSLSocketFactory; public class SSLServer { public static void main(String[] args) throws Exception { int port = 8080; // 加载 SSL 证书 System.setProperty("javax.net.ssl.keyStore", "server_keystore.jks"); System.setProperty("javax.net.ssl.keyStorePassword", "password"); // 创建 SSL socket 工厂 SSLServerSocketFactory sslServerSocketFactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); // 创建服务器 socket ServerSocket serverSocket = sslServerSocketFactory.createServerSocket(port); System.out.println("服务器已启动,监听端口:" + port); while (true) { // 等待客户端连接 Socket clientSocket = serverSocket.accept(); System.out.println("客户端已连接:" + clientSocket.getInetAddress()); // 创建输入输出流 BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); // 从客户端读取消息 String message = in.readLine(); System.out.println("接收到客户端的消息:" + message); // 向客户端发送响应消息 out.println("服务器响应:" + message); // 关闭流和客户端 socket in.close(); out.close(); clientSocket.close(); } } }
C# 客户端代码:
using System; using System.IO; using System.Net.Security; using System.Net.Sockets; using System.Security.Authentication; using System.Security.Cryptography.X509Certificates; using System.Text; public class SSLClient { public static void Main() { int port = 8080; // 创建 SSL 证书集合 X509CertificateCollection certCollection = new X509CertificateCollection(); certCollection.Add(new X509Certificate2("client_certificate.pfx", "password")); // 创建 SSL 流 TcpClient client = new TcpClient("localhost", port); SslStream sslStream = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null); // 客户端认证 sslStream.AuthenticateAsClient("localhost", certCollection, SslProtocols.Tls12, false); Console.WriteLine("客户端已连接服务器"); // 向服务器发送消息 string message = "你好,服务器!"; byte[] messageBytes = Encoding.UTF8.GetBytes(message); sslStream.Write(messageBytes); sslStream.Flush(); Console.WriteLine("已向服务器发送消息:" + message); // 接收服务器的响应消息 byte[] buffer = new byte[2048]; int bytesRead = sslStream.Read(buffer, 0, buffer.Length); string response = Encoding.UTF8.GetString(buffer, 0, bytesRead); Console.WriteLine("接收到服务器的响应消息:" + response); // 关闭 SSL 流和客户端 socket sslStream.Close(); client.Close(); } private static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { if (sslPolicyErrors == SslPolicyErrors.None) { return true; } Console.WriteLine("SSL 证书验证失败:" + sslPolicyErrors); return false; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 能给我一些人生建议吗
- ¥15 mac电脑,安装charles后无法正常抓包
- ¥18 visio打开文件一直显示文件未找到
- ¥15 请教一下,openwrt如何让同一usb储存设备拔插后设备符号不变?
- ¥30 使用quartz框架进行分布式任务定时调度,启动了两个实例,但是只有一个实例参与调度,另外一个实例没有参与调度,不知道是为什么?请各位帮助看一下原因!!
- ¥50 怎么获取Ace Editor中的python代码后怎么调用Skulpt执行代码
- ¥30 fpga基于dds生成幅值相位频率和波形可调的容易信号发生器。
- ¥15 R语言shiny包和ncdf4包报错
- ¥15 origin绘制有显著差异的柱状图和聚类热图
- ¥20 simulink实现滑模控制和pid控制对比,提现前者优势