你需要一个数据封包。和数据指令系统。
数据封包是一个结构,如:
type 数据封包结构
头 as string *1
'例如 $
指令 as string * 3
数据体 as string
尾 as string *1
'例如 & 要求与头不相同
end type
指令,按上面的定义,用三位数据组成的一个字符串。
例如:
const 客户端发OK = "101"
const 服务端发OK ="102"
const 请求用户 ="201"
const 发送用户 ="202"
const 请求广播="301"
const 服务器消息="310"
客户端发包函数
sub putdata(指令 as string*3 ,内容 as string)
'需要增加错误处理,对未联通时等待处理,超时处理。
with winsock1
if
.start =7 then
.senddata
"$"
'头
.senddata
指令
.senddata 内容
.senddata
"&"
'尾
end if
end with
end sub
接收时
定义一个静态变量 或全局变量 如
s1
dim s as string
dim b as boole
'标识是否处理了有尾的数据
dim fj() as string
winsock1.getdata s
s=s1 & s
'把上次的保留下来的数据放到本次数据前
fj=split(s,"$" )
'头字符
for i= 0 to ubound(fj)
if len(fj(i))>0 then
if right(fj(i),1)="&" then
'如果还包含尾
fj(i)=mid(fj(i),1`,len(fj(i))-1)
'分解出二部分来
指令=left(fj(i),3)
内容=mid(fj(i),4)
select case 指令
case 服务端发OK
'不处理
case 发送用户
list1.additem 内容
putdata 客户端发OK,""
case 服务器消息
'显示内容
putdata 客户端发OK,""
end select
else
s1=fj(ubound(fj))
'数据未接收完,没有找到尾,则留到下次处理 。
end if
大体上就是这样的。
服务器端,大体相同,只能对应的指令不同