永发信息网

C#Socket运行老是死掉——高分求助

答案:4  悬赏:0  手机版
解决时间 2021-03-13 17:13
C#Socket运行老是死掉——高分求助
最佳答案
你真牛!!
别说1G内存了,就算是4核+4G也得死!

Listener中不可使用while(true),也没必要开辟线程来实现异步。
另外线程内别在while(true)了。
1个cpu时间会执行多少次这个while(true)吗?
计算int.MaxValue的累加也用不了一个CPU时间。
CPU迅速达到99%,内存也很快达到2/3。

_socket.Accept()返回的socket保存到list或dictionary中,这样服务端可以控制客户端的连接(T人,指定某人回复);

至于异步,别使用线程,因为你这里没有使用线程池,如果使用socket自带的异步方法(或自定义委托)这样会更好。

private void button1_Click(object sender, EventArgs e)
{
Socket server = new TcpClient().Client;
server.BeginAccept(new AsyncCallback(this.callback),server);
}

private void callback(IAsyncResult result)
{
if (result.IsCompleted)
{
Socket server = result.AsyncState as Socket;
var client = server.EndAccept(result);
}
}
就是大量使用begin** 和end**
全部回答
最好 把 死循环 写入线程中去, 这样就避免了窗口死掉的情况
socket侦听的过程是阻塞模式的,虽然你把侦听过来的套接字都放在一个独立的进程中,但是有一点没有注意到:你也应该把侦听套接字的while 函数放在一个独立于主线程的子线程当中。
不然的话主线程一直没有走出while函数,在套接字阻塞式下等待下一个套接字的连接, 窗口就会出现假死的现象。
还有一点就是你在线程体函数roand()里有修改主线程口里某个控件的值的行为,违反了线程安全,这属于夸线程访问哦,在这里我不多说了你可以到百度上搜一下多得是!
1、你在窗口主线程里,执行while(true)循环Accept,窗口会死掉。
2、你在非窗口主线程里,直接对窗口控件进行修改,这个也会死掉。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
本溪县农业科学研究所地址在哪,我要去那里办
华莱士汉堡店(滨州黄河四路餐厅)怎么去啊,有
美联美月地址在哪,我要去那里办事
石见河地址有知道的么?有点事想过去
广州杰瑞企业管理咨询服务有限公司地址在哪,
临夏市城郊镇敬老院地址在什么地方,想过去办
奔跑在哪里啊,我有事要去这个地方
顺心顺意房产我想知道这个在什么地方
外国人为什么喜欢领养中国孤儿
高林·金三华邸地址有知道的么?有点事想过去
鑫旺餐厅地址有知道的么?有点事想过去
下列不属于人民法院受理行政案件范围的是()
朝阳区依法治区领导小组办公室我想知道这个在
word2010页眉横线怎么去掉
连湖农场我想知道这个在什么地方
推荐资讯
城北日杂商行在什么地方啊,我要过去处理事情
dnf进游戏角色自己往右走
人为啥要有两只眼睛?
用化妆品除了水乳霜之外还要抹什么,步骤?
she、him、he、I找不同类
独门寒食夜 中酒落花天 什么意思
螺杆空压机机头080610是多少公斤
小麦入磨水分偏高时如何合理操作磨粉机?
我弟弟2013年未满16周岁,打架,当时一方报警
宝安区天主堂地址在什么地方,想过去办事
高县地税局第七税务所这个地址在什么地方,我
寒战 里 钱嘉乐饰演的徐永基怎么死的 完全没
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?