用c#写的网络程序,开多线程时,有的线程会阻塞在accept函数那儿,会不会是不同线程里的accept冲突啊?如果是,该如何解决?因为我的accept时在单独的一个ftp类里,多线程不是在这个类里开的。
解决方案 »
- C# winfrom 如何实现 ftp 上传文件
- DataGridView 问题大汇总
- 求一个科学计数法的正则表达式..急等...再问一下
- 加分帖
- 求C#的timer控件的使用方法?谢谢!
- 用vs2003自带的安装制作程序的问题,我将manufacture设置成一样,productname设置不一样,在开发环境中安装,发现只能安装一个
- 多线程中,不同对象生成的线程如何能共享一个阻塞?
- C# Remoting 服务端客户端问题(要求改进)
- 这样也可以?
- winform程序,想在picturebox控件上面画个矩形,没出来
- pda 同步問題
- 给数据源加特定条件(可用来gridview,datalist,repeater)
贴出源码来看看,才知道你的程序会不会有同步的问题。只要接受数据的那段。
{
try
{
LogOffServer(); if (!LogOntoServer(stSiteInfo))
return false; Socket hListenSocket = CreateListenChannel();
if (hListenSocket == null)
return false; string strCommand = "LIST " + strDir;
if (!FtpCommand(strCommand))
return false;
if (m_nReplyCode >= 400 || m_nReplyCode <= 0)
return false; Socket DataSocket = hListenSocket.Accept();//调试发现有时会停在这一句
if (DataSocket == null)
return false; if (!ReadDataChannel(DataSocket))
{
hListenSocket.Close();
hListenSocket = null;
return false;
}
if (m_nReplyCode >= 400 || m_nReplyCode <= 0)
{
hListenSocket.Close();
hListenSocket = null;
return false;
}
hListenSocket.Close();
hListenSocket = null;
bPortMode = true;
return true;
}
catch(Exception ee)
{
m_strError = "ListPort() ERROR:" + ee.Message;
return false;
}
}
这个函数在ftp类里,调用时,在主程序开一个线程,定义一个ftp的对象ftp1,然后进行各项操作。
当我开启多个线程时,也就是多个ftp对象一起工作时,才会出现阻塞,单个线程时没有问题。