怎么使用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 项目
- 下一篇: vue 解决: *!!vue-sty
