怎么使用socket在云服务上通信步骤(可支持TCP或UDP)
1.購買云服務器,云服務器會分配給用戶一個公網IP,和自動分配的內網IP,可在服務器管理配置中查看。
2.在云服務器上開發UDP或TCP地址和端口,這樣做目的是使防火墻允許客戶端的地址訪問云服務器,否則不能通信。
如騰訊云:在輕量應用服務器-》服務器-》防火墻-》添加規則? ?
添加應用類型為自定義,IP來源為客戶端地址IP(如任何類型),協議規則為UDP,端口為服務器接收端口即客戶端要發送數據到云服務器的端口,策略為允許。
3.服務器端使用云服務器上的內網IP創建Socket套接字(UDP或TCP協議),客戶端連接和發送均使用云服務器的公網IP。
UDP實例
客戶端
public ?class UDPClient
? ? {
? ? ? ?
? ? ? ? private static Socket udpClient;
? ? ? ? public static EndPoint severEndPoint = new IPEndPoint(IPAddress.Parse("云服務器公網IP"), 60000);
? ? ? ? public void CreateUDPClient()
? ? ? ? {
? ? ? ? ? ? //1,創建socket
? ? ? ? ? ? udpClient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
? ? ? ? ? ? //2,綁定ip跟端口號
? ? ? ? ? ? udpClient.Bind(new IPEndPoint(IPAddress.Any, 60001));
? ? ? ? ? ? //3,接收數據
? ? ? ? ? ? new Thread(ReceiveMessage) { IsBackground = true }.Start();
? ? ? ? ? ? Console.WriteLine("服務器啟動...");
? ? ? ? }
? ? ? ? public ?void SendInfo(string content)
? ? ? ? {
? ? ? ? ? ? byte[] data = Encoding.UTF8.GetBytes(content);
? ? ? ? ? ? udpClient.SendTo(data, severEndPoint);
? ? ? ? }
? ? ? ? ?void ReceiveMessage()
? ? ? ? {
? ? ? ? ? ? while (true)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
? ? ? ? ? ? ? ? byte[] data = new byte[1024];
? ? ? ? ? ? ? ? int length = udpClient.ReceiveFrom(data, ref remoteEndPoint);//這個方法會把數據的來源(ip:port)放到第二個參數上
? ? ? ? ? ? ? ? string message = Encoding.UTF8.GetString(data, 0, length); ? ?
? ? ? ? ? ? ? ? MessageBox.Show("從ip:" + (remoteEndPoint as IPEndPoint).Address.ToString() + ":" + (remoteEndPoint as IPEndPoint).Port + "收到了數據:" + message);
? ? ? ? ? ? }
? ? ? ? }
? ? }
服務器
? public ? class UDPServer
? ? {
? ? ? private static Socket udpServer;
? ? ? public EndPoint clientPoint;
? ? ? public ?void CreateUDPServer()
? ? ? {
? ? ? ? ? try
? ? ? ? ? {
? ? ? ? ? ? ? //1,創建socket
? ? ? ? ? ? ? udpServer = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
? ? ? ? ? ? ? //2,綁定ip跟端口號
? ? ? ? ? ? ? udpServer.Bind(new IPEndPoint(IPAddress.Parse("云服務器內網IP"), 60000));
? ? ? ? ? ? ? //3,接收數據
? ? ? ? ? ? ? new Thread(ReceiveMessage) { IsBackground = true }.Start();
? ? ? ? ? ? ? MessageBox.Show("服務器啟動...");
? ? ? ? ? }
? ? ? ? ? catch(Exception ee)
? ? ? ? ? {
? ? ? ? ? ? ? MessageBox.Show(ee.ToString());
? ? ? ? ? }
? ? ? }
? ? ? public ?void SendInfo(EndPoint client)
? ? ? {
? ? ? ? ? try
? ? ? ? ? {
? ? ? ? ? ? ? udpServer.SendTo(new byte[] { 0x11, 0x22 }, client);
? ? ? ? ? }
? ? ? ? ? catch (Exception ee)
? ? ? ? ? {
? ? ? ? ? ? ? MessageBox.Show(ee.ToString());
? ? ? ? ? }
? ? ? }
? ? ? public void SendInfo(string content)
? ? ? {
? ? ? ? ? try
? ? ? ? ? {
? ? ? ? ? ? ? byte[] data = Encoding.UTF8.GetBytes(content);
? ? ? ? ? ? ? udpServer.SendTo(data, clientPoint);
? ? ? ? ? }
? ? ? ? ? catch(Exception ee)
? ? ? ? ? {
? ? ? ? ? ? ? MessageBox.Show(ee.ToString());
? ? ? ? ? }
? ? ? }
? ? ? ?void ReceiveMessage()
? ? {
? ? ? ? try
? ? ? ? {
? ? ? ? ? ? while (true)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
? ? ? ? ? ? ? ? byte[] data = new byte[1024];
? ? ? ? ? ? ? ? int length = udpServer.ReceiveFrom(data, ref remoteEndPoint);//這個方法會把數據的來源(ip:port)放到第二個參數上
? ? ? ? ? ? ? ? string message = Encoding.UTF8.GetString(data, 0, length);
? ? ? ? ? ? ? ? SendInfo(remoteEndPoint);
? ? ? ? ? ? ? ? clientPoint = remoteEndPoint;
? ? ? ? ? ? ? ? MessageBox.Show("從ip:" + (remoteEndPoint as IPEndPoint).Address.ToString() + ":" + (remoteEndPoint as IPEndPoint).Port + "收到了數據:" + message);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? ? ?catch(Exception ee)
? ? ? ? {
? ? ? ? ? ? MessageBox.Show(ee.ToString());
? ? ? ? }
? ? }
? ? }
總結
以上是生活随笔為你收集整理的怎么使用socket在云服务上通信步骤(可支持TCP或UDP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker 方式 部署 vue 项目
- 下一篇: 解决:Truncated incorre