您的位置:程序门 -> vc/mfc -> 进程/线程/dll



线程中的socket怎么销毁


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


线程中的socket怎么销毁[已结贴,结贴人:doudoushen]
发表于:2007-06-11 16:11:28 楼主
一个listen线程,每接进来一个用户自动生成一个client线程   里面有个clientsocket(申明   定义都在线程),当用户点击界面上的退出按钮   线程我可以关闭,但是socket怎么关闭呢
发表于:2007-06-11 16:29:181楼 得分:0
closesocket
发表于:2007-06-11 16:45:022楼 得分:0
socket.close();
发表于:2007-06-11 21:10:123楼 得分:0
这个函数我知道   ,问题关键是在“client线程   里面有个clientsocket(申明   定义都在线程),”   也就是说我在线程外面怎么知道这个closesocket(socket)这个socket的句柄
如果不在线程外面关闭而在线程里面关闭   这个又怎么做呢
发表于:2007-06-11 22:00:324楼 得分:0
每接进来一个用户自动生成一个client线程   里面有个clientsocket

:这不就有了吗??
发表于:2007-06-11 22:24:195楼 得分:0
可能我没说明白
uint   clientthread(lpvoid   lp)
{
~~~~~~~~
socket   clientsocket=accept(~~~~~);
~~~~~~
}
因为clientsocket不是全局变量   我不能取到clientsocket     我怎么才能closesocket呢
发表于:2007-06-11 23:13:366楼 得分:0
是这样,这个是你的设计问题,我觉的一个链接一个线程本身就不太合适,链接比较少的情况下,你可以用select或者eventselect,然后单独建立一个句柄(在你的控制线程中可以引用到的)等你想关闭连接的时候就给这个句柄发消息(例如send)这个句柄,这时候select返回一个这个句柄可读通知,那么你就关闭所有句柄,我这只是简单的说说,详细过程你得找本网络编程的书看看,推荐读读ace的封装方法
发表于:2007-06-11 23:23:117楼 得分:0
谢谢楼上的     因为我做的服务器最多也就2.30个用户所以连接一个线程一个socket  
我以前一直看到是一个线程一个socket     但是真的做起来遇到问题了   发现这种方法不行   (或者我还不知道这种方法正确关闭socket)
发表于:2007-06-12 02:42:348楼 得分:20
你可以把启动线程的对象的指针通过线程传入,然后把生成的clientsocket保存到传入的对象中。
这样在启动线程的对象中就可以从容关闭socket和清理内存。
发表于:2007-06-12 02:43:339楼 得分:0
补充:应该是通过线程参数传入,少写两个字.呵呵,不好意思.
发表于:2007-06-12 22:52:0310楼 得分:0
不知道你怎么结束线程的.terminatethread?这样不好吧?
如果通过通知告诉线程让它主动退出,那么它不就知道要closesocket了


快速检索

最新资讯
热门点击