C#Socket运行老是死掉——高分求助
答案:4 悬赏:0 手机版
解决时间 2021-03-13 17:13
- 提问者网友:半生酒醒
- 2021-03-12 23:00
C#Socket运行老是死掉——高分求助
最佳答案
- 五星知识达人网友:忘川信使
- 2021-03-12 23:52
你真牛!!
别说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**
别说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**
全部回答
- 1楼网友:鱼芗
- 2021-03-13 02:36
最好 把 死循环 写入线程中去, 这样就避免了窗口死掉的情况
- 2楼网友:有你哪都是故乡
- 2021-03-13 02:19
socket侦听的过程是阻塞模式的,虽然你把侦听过来的套接字都放在一个独立的进程中,但是有一点没有注意到:你也应该把侦听套接字的while 函数放在一个独立于主线程的子线程当中。
不然的话主线程一直没有走出while函数,在套接字阻塞式下等待下一个套接字的连接, 窗口就会出现假死的现象。
还有一点就是你在线程体函数roand()里有修改主线程口里某个控件的值的行为,违反了线程安全,这属于夸线程访问哦,在这里我不多说了你可以到百度上搜一下多得是!
不然的话主线程一直没有走出while函数,在套接字阻塞式下等待下一个套接字的连接, 窗口就会出现假死的现象。
还有一点就是你在线程体函数roand()里有修改主线程口里某个控件的值的行为,违反了线程安全,这属于夸线程访问哦,在这里我不多说了你可以到百度上搜一下多得是!
- 3楼网友:罪歌
- 2021-03-13 01:06
1、你在窗口主线程里,执行while(true)循环Accept,窗口会死掉。
2、你在非窗口主线程里,直接对窗口控件进行修改,这个也会死掉。
2、你在非窗口主线程里,直接对窗口控件进行修改,这个也会死掉。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯