100分求PB下使用WINSOCK的高手进,和UNIX有关,时间很急,大家也可以近来看看!

fangyi1120 2005-05-10 10:18:44
这个软件大致的功能是这样的:
现在要完成一个从win2000(客户机)下面拨号到公司内网,然后通过SOCKET连接到主机(UNIX)进行批量扣款,在win2000下面通过此程序连接到主机,用户在客户机上用程序打开批扣文件,程序一行一行读取此批扣文件,然后发送到主机,在等待接受扣款结果,并生成扣款结果文件。
现在我已经在unix下做好了监听,现在有几个问题:
1,如果只用一个SOCKET连接,那么第二行发送之前应该等待第一条的扣款结果返回,仅仅通过一个SOCKET连接好象不够,是否应该还增加一条从主机发送结果信息到客户机,如果这样,怎么在主机上得到这个客户机的IP
2,我在PB下用的WINSOCK控件,为什么在程序退出之后,第二次启动就没办法连接了,请高手看看我的代码。我第一次用WINSOCK。

谢谢,我的QQ 31493670,MSN fangyi1120@hotmail.com

请高手帮忙,没时间了, 我还要写后面UNIX上的程序,谢谢!
...全文
127 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mtu207 2005-05-12
  • 打赏
  • 举报
回复
1.主机设成服务端方式,负责监听。可以获得客户段IP。
2.退出前winsock应该close一下吧?


多看看winsock通讯的例程吧

另外,一定要注意超时问题。如果在指定的时间内没接到回复,一定要向主机发起一条“冲正”信息。把可能被主机收到的前一条信息冲掉。防止发生单边帐。

一定要仔细定义好主客机的收发协议!如果你说的批扣是指帐户金额的话,一定要慎重!


我两年前做过类似的东东,好像没有遇到楼主这样的问题。

俺是实时向银行前置机发代扣信息(不难处理成批扣吧?),客户端和前置机都是w2k。为了安全,前置机和后台都是由银行方处理。后台是什么系统,俺不管。俺只按照双方事先定义好的通讯格式和步骤处理。

俺是在VB下用winsock做的,用到winsock中的事件处理。俺现在的机器没装VB,同时,好久不用不做类似系统了,也忘的差不多了。要不然,大家可以一起探讨一下。

批扣:我们用的是事先把每一条信息加校验码后,写入文本,再FTP到前置机。前置机收到后,对该文件逐条进行验证。把验证结果文本回传给我。我再按回传后的文本作出是否扣除本地帐户金额。

呵呵。只能说这么多了。涉及商业机密,恕不能提供源码:)
lzheng2001 2005-05-11
  • 打赏
  • 举报
回复
这样要求对方服务器要有响应处理!
有时如果长时间没有信息返回(极少会出再这种情况),应该退出循环,再重新发送数据.
在上面的do while 中加上等待时间的条件即可
zxz107 2005-05-11
  • 打赏
  • 举报
回复
关注中...
lzheng2001 2005-05-11
  • 打赏
  • 举报
回复
对方服务器收到数据后,应该会发回成功收到的信息的,所以你应该在dataarrival接收返回的信息
this.object.GetData(ref is_ServerMess) //is_ServerMess 是实例变量
然后再修改一下你的发送语句
do while fileread(fileread,readline) >0
yield()
is_boolean lb_ReplySuccess
is_ServerMess = ''
winsock.object.senddata(readline )
DO WHILE is_ServerMess = '' //等待对方返回成功信息
Yield()
LOOP
mle_sendeddata.text = mle_sendeddata.text + readline + char(13) + char(10)
//sleep(1000) //延时1秒
loop
fangyi1120 2005-05-11
  • 打赏
  • 举报
回复
现在遇到了一个问题,我读文件的时候通过循环发出去,但是却出现了掉包的情况,单步跟踪的时候发现数据发送没有掉包,程序是这样的
if winsock.object.state <> 7 then
return
end if

string filename,readline,sendbuffer
integer fileread,a,i

filename = trim(sle_filename.text)

fileread = fileopen(filename,LineMode!,Read!,LockReadWrite!)

do while fileread(fileread,readline) >0
yield()
winsock.object.senddata(readline )
mle_sendeddata.text = mle_sendeddata.text + readline + char(13) + char(10)
//sleep(1000) //延时1秒
loop
fileclose(fileread)

j9dai 2005-05-11
  • 打赏
  • 举报
回复
学习ing + 友情UP
princelily 2005-05-11
  • 打赏
  • 举报
回复
帮顶!共同学习!嘿嘿
lzheng2001 2005-05-10
  • 打赏
  • 举报
回复
有代码看看吗?

1,079

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧