socket编程c多线程
A. C# winForm Socket 多线程 编程 关闭问题
2中方式,除主线程外其他线程设置为后台线程,即background thread,这是线程创建时的一个属性,另一种就是应用程序退出时的事件里手动退出线程
----
void Application_Exit(object sender,args e)
{
//thread.abort();
}
好像是这样写吧,好久没用C#了,有点忘了,MSDN上有详细的说明
socket是非托管资源,我的理解是最好首先清理(在其他线程前);
B. socket同步异步多线程问题
1.是多线程,不算异步。
2.BeginAccept是异步,虽然你的程序中用myreset.WaitOne();进入了等待事件的过程。如果不等待事件,就可以继续运行下面的程序了。
我的经验是,这种情况就不用异步。
3.回调当然会消耗系统资源。大数据的话,我建议用线程循环做。
4.同步就会阻塞,异步主线程不阻塞,当需要监听后,还需要做一些其他处理的话,就用异步,如果一切就绪等待连接的,就用同步比较好。
5.委托给了.net框架,内部应该也是线程和阻塞。
路过,不足之处,请继续问。
C. c++ 多线程socket编程可以多个线程同时accept数据吗
监听连接都用一个线程就行了,多线程监听是不明智的,监听到之后把创建连接的套接字发送给其他线程通信就行。。。。
D. linux c socket 如何实现一个进程多个线程,每个线程管理多个socket连接
大家仔细看,楼主的题目还是很有难度的呢,一个进程多个线程容易实现,但是要让这些线程中每个线程都管理多个socket连接,确实比较难~~坐等高手。
不过一般都是一个线程处理一个socket连接,这种例子是:
(取自书上,仅供学习,直接编译肯定通不过,少书上其他代码)
==================================================
/* include serv06 */#include "unpthread.h"
intmain(int argc, char **argv)
{
int listenfd, connfd;
void sig_int(int);
void *doit(void *);
pthread_t tid;
socklen_t clilen, addrlen;
struct sockaddr *cliaddr;
if (argc == 2) listenfd = Tcp_listen(NULL, argv[1], &addrlen);
else if (argc == 3)
listenfd = Tcp_listen(argv[1], argv[2], &addrlen);
else
err_quit("usage: serv06 [ <host> ] <port#>");
cliaddr = Malloc(addrlen);
Signal(SIGINT, sig_int);
for ( ; ; ) { clilen = addrlen;
connfd = Accept(listenfd, cliaddr, &clilen);
Pthread_create(&tid, NULL, &doit, (void *) connfd); }
}
void *doit(void *arg)
{
void web_child(int);
Pthread_detach(pthread_self()); web_child((int) arg);
Close((int) arg);
return(NULL);
}
/* end serv06 */
voidsig_int(int signo)
{
void pr_cpu_time(void);
pr_cpu_time(); exit(0);
}
================================================================
E. 关于Socket多线程编程的recv函数问题
建议设个flag,在服务端进这个while后,如果没处理(文件没发送)完毕前,不在进入,或多开几个thread设置不同端口等待接收客户端的要求。