Code

所属分类:网络编程
开发工具:C/C++
文件大小:175KB
下载次数:10
上传日期:2013-03-23 14:39:32
上 传 者526909165
说明:  网络编程实验代码,基本的文件传输、线程等
(just some codes)

文件列表:
Makefile\makefile (1507, 2006-04-28)
MultiServerLinux\client.jpg (31074, 2007-05-29)
MultiServerLinux\ClientLinux.c (2927, 2007-05-29)
MultiServerLinux\debug.jpg (82578, 2007-05-29)
MultiServerLinux\MultiServerLinux.c (5014, 2007-05-29)
MultiServerLinux\semfunc.c (1059, 2007-05-20)
MultiServerLinux\semfunc.h (479, 2006-03-22)
MultiServerLinux\server-quit.jpg (33802, 2007-05-29)
MultiServerLinux\server.jpg (39051, 2007-05-29)
Select\client.cpp (1672, 2007-05-08)
Select\select.c (5914, 2012-06-11)
Semphore\master.c (23921, 2006-04-29)
Semphore\posix_sem.c (2803, 2004-12-22)
Semphore\semfunc.c (1059, 2007-05-20)
Semphore\semfunc.h (479, 2006-03-22)
Semphore\tsem.c (3657, 2006-02-23)
Semphore\win_sem.c (1438, 2007-06-20)
SingleServerLinux\ClientLinux.c (2561, 2009-03-06)
SingleServerLinux\SingleServerLinux.c (2390, 2007-05-15)
SingleServerWin32\client.cpp (1465, 2011-04-08)
SingleServerWin32\client.cpp.bak (1431, 2008-03-23)
SingleServerWin32\SingleServer.c (1982, 2011-04-08)
SingleServerWin32\SingleServer.c.bak (1948, 2007-05-29)
TheadPool\ThreadPoolServer.cpp (3431, 2012-06-11)
Thread\client.cpp (2314, 2007-05-08)
Thread\Thread.rar (2652, 2009-03-31)
Thread\ThreadServer.cpp (3327, 2012-06-11)
Thread\文件传送示例.txt (0, 2007-05-22)
ThreadSyn\AutoEvent.cpp (1018, 2008-04-06)
ThreadSyn\CriticalSection.c (1671, 2008-04-01)
ThreadSyn\ManualEvent.cpp (854, 2008-04-06)
ThreadSyn\mutex.c (991, 2008-04-01)
ThreadSyn\ThreadPool.cpp (1636, 2012-06-06)
WSAAsyncSelect\asyncserver.cpp (32096, 2002-01-18)
WSAEventSelect\wsaeventselect.cpp (4266, 2011-05-23)
C_Java\C和Java传文件.txt (4843, 2012-05-28)
CompletionPort\client.cpp (1662, 2011-05-30)
CompletionPort\client.cpp.bak (1655, 2008-04-13)
CompletionPort\CompletionPortServer.cpp (6570, 2008-04-13)
... ...

=====完成端口模型===== 抽象出一个完成端口大概的处理流程: 1:创建一个完成端口。 2:创建一个线程A。 3:A线程循环调用GetQueuedCompletionStatus()函数来得到IO操作结果,这个函数是个阻塞函数。 4:主线程循环里调用accept等待客户端连接上来。 5:主线程里accept返回新连接建立以后,把这个新的套接字句柄用CreateIoCompletionPort关联到完成端口,然后发出一个异步的 WSASend或者WSARecv调用,因为是异步函数,WSASend/WSARecv会马上返回,实际的发送或者接收数据的操作由WINDOWS系统去做。 6:主线程继续下一次循环,阻塞在accept这里等待客户端连接。 7:WINDOWS系统完成WSASend或者WSArecv的操作,把结果发到完成端口。 8:A线程里的GetQueuedCompletionStatus()马上返回,并从完成端口取得刚完成的WSASend/WSARecv的结果。 9:在A线程里对这些数据进行处理(如果处理过程很耗时,需要新开线程处理),然后接着发出WSASend/WSARecv,并继续下一次循环阻塞在GetQueuedCompletionStatus()这里。 归根到底概括完成端口模型一句话: 我们不停地发出异步的WSASend/WSARecv IO操作,具体的IO处理过程由WINDOWS系统完成,WINDOWS系统完成实际的IO处理后,把结果送到完成端口上(如果有多个IO都完成了,那么就在完成端口那里排成一个队列)。我们在另外一个线程里从完成端口不断地取出IO操作结果,然后根据需要再发出WSASend/WSARecv IO操作。

近期下载者

相关文件


收藏者