• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

Socket.select() 的问题

newlju 2004-11-02 05:04:55
服务器端代码:
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专门用一个线程处理就能收到数据,,,郁闷呀。。
...全文
383 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
newlju 2004-11-04
while(ClientList.Count < 0)
确实是写错了。
换成异步消息加线程池,以经自已解决了。结贴
回复
xiaoslong 2004-11-03
帮你顶一下
回复
mulintaomulintao 2004-11-03
ArrayList tempList = ClientList; worong
Arraylist tempList=new arraylist(ClientList)
回复
mulintaomulintao 2004-11-03
你的ArrayList 中存的socket ,
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的,如果他不是tempList中的第一个,调用((Socket)tempList[i]).Receive(data),仍旧会阻塞,因此出错难免
回复
mulintaomulintao 2004-11-03
while(ClientList.Count < 0)
改为
while(ClientList.Count 〉 0)
回复
zhouyong2052 2004-11-02
up
回复
newlju 2004-11-02
up......
回复
newlju 2004-11-02
回复人: sexfreebird(自由鸟) ( ) 信誉:100 2004-11-02 17:45:00 得分: 0


有没有debug一下看看是到哪里出错的呀


不是出错。是
listBox1.Items.Add(System.Text.Encoding.BigEndianUnicode.GetString(data,0,byteRec));
什么都没输出。好像是Socket.select之后的代码都没有执行。
回复
sexfreebird 2004-11-02
有没有debug一下看看是到哪里出错的呀
回复
newlju 2004-11-02
up....
回复
cs920 2004-11-02
NO.1
up
回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2004-11-02 05:04
社区公告

让您成为最强悍的C#开发者