Socket.select() 的问题
服务器端代码:
private ArrayList ClientList; // 保存当前以连接的客户端socket
启动一个线程负任侦听连接并存入ClientList
protected void StartListen()
{
IPAddress serverAddress = IPAddress.Parse("192.168.0.7");
tcpListener = new TcpListener(serverAddress,2626); tcpListener.Start();
listBox1.Items.Add("wait a conn...");
while(IsListen)
{
Socket socketForClient = tcpListener.AcceptSocket();
socketForClient.Blocking = true; // 设置socket处于阻塞模式
lock(ClientList)
{
ClientList.Add(socketForClient);
}
}
}
另一个负责读取客户端发送过来的数据的线程
private void StartMsgRead()
{
while(ClientList.Count < 0)
{
ArrayList tempList = ClientList;
Socket.Select(tempList,null,null,1000);
for(int i=0;i<tempList.Count;i++)
{
Byte[] data = new byte[1024];
int byteRec;
byteRec = ((Socket)tempList[i]).Receive(data);
listBox1.Items.Add(System.Text.Encoding.BigEndianUnicode.GetString(data,0,byteRec));
}
}
}
----------------------------------
我的想法就是用非阻塞方式一个线程来专门侦听接受客户端连接,半把以连接的socket存到一个socket列表中,
然后另外一个线程中使用socket.select来确定那些socket有数据可读,
按上面的代码客户端连接后发送数据后服务端没有显示出发来的数据,不知道错在那里,初数网络编程,那位高人给偶指点指点。。。
服务端改成阻塞的每个socket专门用一个线程处理就能收到数据,,,郁闷呀。。