关于socket的问题

tianch 2009-07-10 04:15:34
本段代码是将content字符串内容传到服务器,等待服务器响应并将服务器传回的字符串返回,不明白为什么执行sclient.recv(recvBuf,Len(recvBuf),0)这句的时候就一直阻塞,停止响应了,如果ulParam=1则直接返回空值,服务器也没收到任何数据。代码如下:


string result=''
socketstream sclient
sclient = create socketstream
ulong ulParam = 0
sclient.ioctlsocket(ws.FIONBIO, ulParam)
ulong ulAddr
ulAddr = ws.inet_addr(address)
if sclient.wsconnect(ulAddr,integer(port)) <> -1 then
blob buf
blob recvBuf
buf = blob(content)
recvBuf = blob(space(256))
sclient.send(buf,Len(buf),0)

do while sclient.recv(recvBuf,Len(recvBuf),0) <> -1
result = result + trim(string(recvBuf))
loop
result = result + trim(string(recvBuf))
sclient.closesocket()
destroy sclient
end if
return result
...全文
28 点赞 收藏 8
写回复
8 条回复
张义雄 2009年07月17日
用MSWINSOCK.OCX吧,我也是刚刚才开始用,还可以吧。
回复 点赞
WorldMobile 2009年07月11日
把代码改成如下再试一下

string result=''
socketstream sclient
sclient = create socketstream
ulong ulParam = 0
sclient.ioctlsocket(ws.FIONBIO, ulParam)
ulong ulAddr
ulAddr = ws.inet_addr(address)
if sclient.wsconnect(ulAddr,integer(port)) <> -1 then
blob buf
blob recvBuf
buf = blob(content)
recvBuf = blob(space(256))
sclient.send(buf,Len(buf),0)

long ll_i
for ll_i = 1 to 10000
yield()
next

do while sclient.recv(recvBuf,Len(recvBuf),0) <> -1
result = result + trim(string(recvBuf))
yield()
loop
result = result + trim(string(recvBuf))
sclient.closesocket()
destroy sclient
end if
return result
回复 点赞
DYFDWX 2009年07月11日
我也要,请把关于SOCKET示例发一份给我
回复 点赞
newease 2009年07月11日
已经将示例发至邮箱,请查收
回复 点赞
wag_enu 2009年07月10日

把事件代码合并写入一自定义事件,有数据需要读取时,在该事件中用recv 取数据即可.
回复 点赞
tianch 2009年07月10日
sclient.send(buf,Len(buf),0)
这句执行后,服务器没收到任何内容,所以没有任何响应,但是如果把以下几句去掉,服务器就会收到信息,不知道为什么
do while sclient.recv(recvBuf,Len(recvBuf),0) <> -1
result = result + trim(string(recvBuf))
loop
result = result + trim(string(recvBuf))
回复 点赞
newease 2009年07月10日
如果楼主需要此方面示例,可将邮箱地址发私信给我
回复 点赞
永生天地 2009年07月10日
socket默认是阻塞模式,如果连接正常,recv要等到接收到数据后才返回,如果对方没有发数据过来,就会一直阻塞。

回复 点赞
发动态
发帖子
API 调用
创建于2007-09-28

430

社区成员

4758

社区内容

PowerBuilder API 调用
社区公告
暂无公告