接收到有人连接就保存起来,那个lock用的对吧? 等有人断开的时候就从容器里删除。删除的代码还没写呢
namespace diancai { public class GlobleVariable { public static Socket s; public static IPEndPoint ipe; public static List<Socket> arrSocket; } }
namespace diancai { public partial class MainWindow : Form { public MainWindow() { InitializeComponent(); Text = GlobleVariable.sWindowTitle; } private void MainWindow_Load(object sender, EventArgs e) { GlobleVariable.arrSocket = new List<Socket>();//初始化容器 } } }
private void btn_point_Click(object sender, EventArgs e)//单击按钮 { Thread ListenSocket = new Thread(new ThreadStart(fnListenSocket)); ListenSocket.Start(); } protected void fnListenSocket() { GlobleVariable.ipe = new IPEndPoint(IPAddress.Parse(textBox1.Text), Convert.ToInt32(textBox2.Text)); GlobleVariable.s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个socket对像,假如用udp协议,则要用SocketType.Dgram类型的套接字 GlobleVariable.s.Bind(GlobleVariable.ipe);//绑定EndPoint对像(8889端口和ip地址) GlobleVariable.s.Listen(0);//开始监听 while(true) { Socket temp = GlobleVariable.s.Accept(); lock (GlobleVariable.arrSocket) { GlobleVariable.arrSocket.Add(temp); } } }
解决方案
5
可以。
5
假如是短时锁定的话,建议用spinlock 。你的写法没什么问题。
10
是的,没有问题,但但代码量大了就不适合lock了
5
没什么问题的