我有一个返回ip及其端口列表的函数,这是函数:
public static List<ServerSocks> loadSocks()
{
var result = new List<ServerSocks>();
string fileSocks = Path.GetFullPath(Path.Combine(Application.StartupPath, "socks-list.txt"));
var input = File.ReadAllText(fileSocks);
var r = new Regex(@"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5})");
foreach (Match match in r.Matches(input))
{
string ip = match.Groups[1].Value;
int port = Convert.ToInt32(match.Groups[2].Value);
ServerSocks bi = new ServerSocks();
bi.IpAddress = IPAddress.Parse(ip);
bi.Port = port;
result.Add(bi);
}
return result;
}
我希望列表中的随机值成为我的oServer的代理设置
List<ServerSocks> list;
List<ServerSocks> list = loadSocks();
SmtpServer oServer = new SmtpServer("");
foreach (var item in list)
{
oServer.SocksProxyServer = Convert.ToString(item.IpAddress);
oServer.SocksProxyPort = item.Port;
}
我喜欢这样,但他总是给我最后的ip和他的端口。
我该怎么办?
谢谢。
答案 0 :(得分:1)
当您第一次进入循环并且所有连续运行都覆盖该值时,您会设置oServer.SocksProxyServer
。它会循环显示您的所有List<ServerSocks>
如果要转换为oServer
列表,那么您将在循环外创建一个新列表并在循环内执行此操作:
Add(new OServer { SocksProxyServer=item.IpAddress.ToString(), SocksProxyPort=item.Port })
如果你能更详细地解释你想要发生什么,那就太好了。我希望这对你有帮助。
修改强> 你根本不需要循环。获取随机索引并检索相应的项就足够了。
var oServer = new SmtpServer("");
var random = new Random();
var randomIndex = random.Next(list.Count);
var socks = list[randomIndex];
oServer.SocksProxyServer = socks.IpAddress;
oServer.SocksProxyPort = socks.Port;
答案 1 :(得分:0)
为了实现您想要的目标,请执行以下操作:
List<ServerSocks> list = loadSocks();
Random rnd = new Random();
int r = rnd.Next(list.Count);
oServer.SocksProxyServer = Convert.ToString(list[r].IpAddress);
oServer.SocksProxyPort = list[r].Port;
然后它将从ServerSocks列表中获取一个随机对象并使用。