socket 的并发问题

zhao5195 2008-08-04 11:32:38
while (true)
{
mySocket = listener.Accept();//为新建连接创建新的Socket。
Log("Get a connect");
_thread3 = new Thread(new ThreadStart(DDo));
_thread3.Start();

}


private void DDo()
{
string recvStr = "";
byte[] recvBytes1 = new byte[1024];
byte[] recvBytes2 = new byte[1024];
recvStr = null;
bool con = false;
string filePath = "";
try
{
while (true)
{
byte[] recvBytes = new byte[1024];
int bytes = 0 ;
if (mySocket.Connected == false)
{
continue;
}
bytes = mySocket.Receive(recvBytes);//从客户端接受信息
}
}
.................
.................以下是相关的操作
.................
}



如上所示: 如果我接受大数据(十M)的数据的同时,有个连接进来,程序就回出错。如何解决并发的问题.

希望高手帮忙解决一下,以前没接触过SOCKET.
...全文
136 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhao5195 2008-08-05
  • 打赏
  • 举报
回复
我现在碰到的问题是,好象程序块锁不住,就是局域变量的问题,初始变量con=false,a进程访问了变量 con=true; b进程访问了变量开始应该CON=FALSE 但一开始就受A进程影响了`.
zhao5195 2008-08-05
  • 打赏
  • 举报
回复
我应该锁住那快对象?是我接收的对象吗????
zhao5195 2008-08-05
  • 打赏
  • 举报
回复
由于小弟是刚接触SOCKET不是很懂,楼上给出的加锁,能否给出例子,有加锁就有解锁.
yagebu1983 2008-08-05
  • 打赏
  • 举报
回复

private static volatile Logger _logger;
public static Logger DefaultLogger
{
get
{
if (_logger == null)
{
lock (syncObj)
{
if (_logger == null)
{
_logger = new Logger();
}
}
}

return _logger;
}
}

zhao5195 2008-08-05
  • 打赏
  • 举报
回复
如何给SOCKET加上锁呢??具体有那些要求?
zhao5195 2008-08-05
  • 打赏
  • 举报
回复
谢谢,已经出来了, 加锁是对全局或者同个文件操作.
其实用一个线程跑一个SOCKET就可以解决````
编号27149 2008-08-05
  • 打赏
  • 举报
回复
在DDo() 中加琐
public void DDo()
{
Monitor.Enter(this);//当前对象加锁

//操作代码

Monitor.Exit(this);//当前对象解锁


}
guying999 2008-08-04
  • 打赏
  • 举报
回复
加锁
卧_槽 2008-08-04
  • 打赏
  • 举报
回复
对Socket的操作都必须Lock
因为Socket不支持真正的并发

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧