你的位置:pcMing工作室 >> 资讯 >> 编程开发 >> C++编程 >> 详细内容 在线投稿

TCP/IP Winsock编程要点(转天极网)

排行榜 收藏 打印 发给朋友 举报 来源: 互联网   发布者:未知
热度2353票  浏览322次 【共0条评论】【我要评论 时间:2010年4月08日 20:29

$eX_R'i*C0
,K:l-X(rKE/p?6v04、同步方式中解决recv,send阻塞问题 pcMing工作室qk6c5v `@F?
pcMing工作室'B_6r4a(O:ZW\
  采用select函数解决,在收发前先检查读写可用状态。 pcMing工作室#\E%q{r\4B c Gb(y
pcMing工作室g Fo|/J!?
  A、读
$e&lj%dqE-R0
OR)p1E{z0  例子: pcMing工作室.h?!qD1S5^J:]T
pcMing工作室Q \kR~Q
TIMEVAL tv01 = {0, 1};//1ms钟延迟,实际为0-10毫秒
vT(bJ1x C}9L&Cs0
/|"Qy1l~ Cw9J,\0int nSelectRet;
Ep5~*C7Pbt{ R-u c0pcMing工作室T0g C}'@n5}
int nErrorCode; pcMing工作室nv8n!}1^x(D&s:vXs
pcMing工作室Y[AH"F)b.YO I
FD_SET fdr = {1, sConnect}; pcMing工作室K$[.x ~H"xP
pcMing工作室/sW'S:d^Z
nSelectRet=::select(0, &fdr, NULL, NULL, &tv01);//检查可读状态
7}*IR-]3LrSM5B0
;gS'o7o-Jv C.k!S&\a0if(SOCKET_ERROR==nSelectRet) pcMing工作室1Wj NY pQU*szZ

m`N0r$Y#Y;?r:{4U0{ pcMing工作室2bS$k jyt#EAJ'}

SO'O)h4r"Tx3?p lV0nErrorCode=WSAGetLastError();
X el"\ K(_P0
YN8r4Hy&A!}*a0TRACE("select read status errorcode=%d",nErrorCode); pcMing工作室3s7Rn K4Wf
pcMing工作室o.^x x,?qM
::closesocket(sConnect);
5ZV3P(f~+zO9T0
qP7yG7S)Q#y0goto 重新连接(客户方),或服务线程退出(服务方); pcMing工作室aS#CsN'Ju!q

7|P0A4g3gi8j*i1U C$a^ Z0}
.`)Y'y!U/w+[.ipT0
1_b3x7w SX)O9gi!J0if(nSelectRet==0)//超时发生,无可读数据 pcMing工作室DV,[2_;H7P k9P:c/k
pcMing工作室%VIB)M&P
{
\1@@ j,u6z'@9^MA0pcMing工作室|/rzVS5u6Rk!eJ#J D
继续查读状态或向对方主动发送
/t2q LM&tVT;j ?0D0
M7?0V)K![bvt5ndU0} pcMing工作室RD#F2v$t

U;tv&ovgRhO%J0else pcMing工作室cs)~Ej$o

a6\6xE1Qq(o0{
:Zq&U9S;lz0
!x&S&h(u@-g:E0读数据
If$q d e I3M0
!A} ew7i;s @T0}

k;Z;p:H4CFB)a$v x"`0  B、写
U(@7rwGwN0pcMing工作室 P.b1j4T)GL#Wi
TIMEVAL tv01 = {0, 1};//1ms钟延迟,实际为9-10毫秒 pcMing工作室tq4RTQrl `
pcMing工作室xNK Ko
int nSelectRet; pcMing工作室K.ChV/uc
pcMing工作室k{q@N,|
int nErrorCode;
ICq Dt+h0
-j S!}V%X-xo/J X `!{0FD_SET fdw = {1, sConnect}; pcMing工作室1J xO l3RRL
pcMing工作室e])_/nF X3`7FD;i
nSelectRet=::select(0, NULL, NULL,&fdw, &tv01);//检查可写状态
jr:d+Bo1mUWD%v M0pcMing工作室EX2\7E,ZF
if(SOCKET_ERROR==nSelectRet) pcMing工作室:^&DD0sF!jG.T
pcMing工作室.su I2du+d#n
{
J fc1t!V n#J0
(~]:]QJh0nErrorCode=WSAGetLastError(); pcMing工作室/`H5s _+u;Py Ye
pcMing工作室3[7QANb
TRACE("select write status errorcode=%d",nErrorCode);
?:[h2?!`7J uW0pcMing工作室 ^6L:i,FQN;?*Mq\
::closesocket(sConnect);
q2lBra0pcMing工作室x1L5D`s$`*f6r5R
//goto 重新连接(客户方),或服务线程退出(服务方);
6}lp*S|K2sA8J0pcMing工作室:oK7W4W#gl qP)d$_
}
;Ormmn0pcMing工作室q6o'WI;Yw4koM
if(nSelectRet==0)//超时发生,缓冲满或网络忙 pcMing工作室|*eMt\?6Z

"_z:MX2|0Yn1vA0{ pcMing工作室k V(x4T(yu7m

sMD6JALg0//继续查写状态或查读状态 pcMing工作室.z3vgG]lz?/} L-D y
pcMing工作室(iZv'C:s4Y}
}
]Y-k2l~n]$p0pcMing工作室@g%TYAL.]~
else pcMing工作室cM3Ue&}t[!n;R!D:X

AC0C4P"?3}3i$P?0{ pcMing工作室~@a~Yz D&i

!J:q8\$[cR!Iz0//发送
0J,w9bk_4J7bU0
nT0u9})d"p0}
pcMing工作室7A K y7gse
  5、改变TCP收发缓冲区大小
7{/cf3B*jM0
*vYT`l#ie-r0  系统默认为8192,利用如下方式可改变。 pcMing工作室 Q_q-tj6s@G

7i*r.A(I+Wi0
SOCKET sConnect;
,b'[.lN2^$[8OW!T0pcMing工作室7fy~s3R1@3W
sConnect=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
,b%_#u5v;K7EDf Qg0pcMing工作室k.s s4OS M-PP*i J-w
int nrcvbuf=1024*20;
HAs2\c;u:@%D2O0pcMing工作室dsx)o9qU`
int err=setsockopt(
#pr;cR#U0pcMing工作室/X WDe9o3i
sConnect, pcMing工作室6U'v0n}(Oz
pcMing工作室9~:S6Xix(T
SOL_SOCKET,
5i:^/X R j-j0
r-LN'b^B/W0SO_SNDBUF,//写缓冲,读缓冲为SO_RCVBUF pcMing工作室/`]-DQ,D6{q-SHT

.euh D'|:p0(char *)&nrcvbuf,
%r%cX3h+} E0pcMing工作室4I j,^.A?T!IEwU
sizeof(nrcvbuf)); pcMing工作室%z:s7Xma!|%FD
pcMing工作室9C.u[C&c
if (err != NO_ERROR) pcMing工作室"XW^?%uht*f
pcMing工作室Hf3NI3I D
{ pcMing工作室 ^.A:vF$ckM
pcMing工作室,Jn8D MqBa
TRACE("setsockopt Error!\n");
6q)VlS&m.~0
/@2B.P"~6d~w u0}
;J iq0ty3IJS0pcMing工作室.Ji8hu"Y
在设置缓冲时,检查是否真正设置成功用 pcMing工作室%Z+a}+@%p"ODM8av
pcMing工作室H5gn a)l4R5J"w
int getsockopt( pcMing工作室eZ;D+J5V
pcMing工作室9n!oRHg#E*z-H
SOCKET s,
Tqx B1? {W4K0pcMing工作室Bp%^eW;_
int level, pcMing工作室Ky0DM:xP3^E
pcMing工作室o1]7P`@ qk
int optname, pcMing工作室:L j:V'cT y ?0]

Egyq;a[[0char FAR *optval, pcMing工作室@)xH@(V*Di

's#ge)T9wh;q0int FAR *optlen pcMing工作室k?x!L3G C1R1a,DR5A
pcMing工作室e D!Q8e1X~"s'GQ
);

*P7IKYsM.n [{z0

顶:114 踩:117
对本文中的事件或人物打分:
当前平均分:0.01 (767次打分)
对本篇资讯内容的质量打分:
当前平均分:-0.18 (712次打分)
【已经有643人表态】
98票
感动
79票
路过
72票
高兴
64票
难过
72票
搞笑
77票
愤怒
85票
无聊
96票
同情
上一篇 下一篇
发表评论
换一张

网友评论仅供网友表达个人看法,并不表明本网同意其观点或证实其描述。

查看全部回复【已有0位网友发表了看法】

网络资源