我很難將由一種方法組成的類分解為更小的方法。我有一個簡單的套接字類,它可以一步啟動、發送和接收訊息(一種方法)。現在我想將其分為初始化、發送、接收和結束的單獨步驟,如下所示。我嘗試了很多不同的組合,但我無法讓它發揮作用。
我的程式運行良好:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.IO;
namespace SocketCom
{
internal class Program
{
public class SyncSocketClient
{
public static void StartClient() \\<<-----------
{
byte[] bytes = new byte[1024];
var hostName = Dns.GetHostName();
IPHostEntry ipHost = Dns.GetHostEntry(hostName);
IPAddress ip = ipHost.AddressList[1];
IPEndPoint remoteEP = new IPEndPoint(ip, 11111);
Socket sender = new Socket(ip.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
sender.Connect(remoteEP);
sender.RemoteEndPoint.ToString();
byte[] msg = Encoding.ASCII.GetBytes("Hello");
int byteSent = sender.Send(msg);
int byteReceived = sender.Receive(msg);
Console.WriteLine($"[ECHO TEST] {Encoding.ASCII.GetString(bytes, 0, byteReceived)}");
sender.Shutdown(SocketShutdown.Both);
sender.Close();
}
}
static void Main(string[] args)
{
SyncSocketClient.StartClient();
}
}
}
我想在下面(不作業)。我不關心訪問修飾符或靜態與否。我只想以任何可能的方式將一種方法分解為三個單獨的方法。
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.IO;
namespace SocketCom
{
internal class Program
{
public class SyncSocketClient
{
public static void StartClient()\\<<-----------
{
byte[] bytes = new byte[1024];
var hostName = Dns.GetHostName();
IPHostEntry ipHost = Dns.GetHostEntry(hostName);
IPAddress ip = ipHost.AddressList[1];
IPEndPoint remoteEP = new IPEndPoint(ip, 11111);
Socket sender = new Socket(ip.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
sender.Connect(remoteEP);
}
public static void Send(string message)\\<<-----------
{
sender.RemoteEndPoint.ToString();
byte[] msg = Encoding.ASCII.GetBytes(message);
int byteSent = sender.Send(msg);
}
public static void Receive()\\<<-----------
{
int byteReceived = sender.Receive(msg);
Console.WriteLine($"[ECHO TEST] {Encoding.ASCII.GetString(bytes, 0, byteReceived)}");
}
public static void EndClient()\\<<-----------
{
sender.Shutdown(SocketShutdown.Both);
sender.Close();
}
}
static void Main(string[] args)
{
SyncSocketClient.StartClient();
SyncSocketClient.StartClient("Hello");
SyncSocketClient.Receive();
SyncSocketClient.EndClient();
}
}
}
我感謝您的幫助。
uj5u.com熱心網友回復:
根據您的嘗試,我可以看出您對某些事情的誤解。一種是嘗試在它們不在范圍內的位置訪問變數。sender并且msg是兩個例子。另一個是您沒有msg從該Send方法回傳,因此它可以在該Receive方法中使用。我建議這篇文章幫助您在繼續之前了解 C# 中方法的基礎知識。
如果您使用的是 Visual Studio,Visual Studio 自動重構將對此有所幫助,但是我強烈建議您了解該工具在您使用后對您的代碼所做的作業,并且在您理解它之前不要繼續,這是一個基本的編程概念。
選擇要提取到方法中的代碼,右鍵單擊,然后選擇“Quick Actions and Refactorings...”,然后選擇“Extract Method”。IDE 將為您創建方法和所有必要的引數。
uj5u.com熱心網友回復:
第一步是將 Socket 變數排除在方法之外。所以在類級別宣告并在所有方法中使用這個套接字。靜態套接字發送者;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/518527.html
上一篇:我可以在哪個包中找到ConfigureHostBuilder?
下一篇:交織兩個向量的更好方法-AVX2
