| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 630 人关注过本帖
标题:如何用socket实现两个list之间的数据传输
只看楼主 加入收藏
candy_3100
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-6-7
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
如何用socket实现两个list之间的数据传输
我做的是一个聊天程序,有服务器和客户端。

服务器搜集在线好友信息之后,形成一个好友列表,list1,我用函数传输
for i = 0 to list1.listcount - 1
   winsock1.senddata list1.list(i)
next

客户端用定时时钟实时刷新接收数据,形成好友列表,list1,我用函数接收
dim ff as string
list1.clear
winsock1.getdata ff
list1.additem  ff

问题是,假如我服务器传输的list如下
192.168.0.1
192.168.0.2
客户端接收到的list1如下
192.168.0.1192.168.0.2

客户端没有换行,是我代码的问题吗?求大神讲解。我被这个问题困扰好久了。
搜索更多相关主题的帖子: 如何 服务器 在线好友 客户端 
2013-06-07 15:20
Artless
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:4211
专家分:28888
注 册:2009-4-8
收藏
得分:10 
客户端用定时为什么?

无知
2013-06-07 17:59
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:10 
你需要一个数据封包。和数据指令系统。

数据封包是一个结构,如:
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

大体上就是这样的。
服务器端,大体相同,只能对应的指令不同

授人于鱼,不如授人于渔
早已停用QQ了
2013-06-07 18:09
快速回复:如何用socket实现两个list之间的数据传输
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015033 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved