您的位置:程序门 -> vb -> 网络编程



vb中用winsock发送字符串数据数据时出现乱码怎么回事?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


vb中用winsock发送字符串数据数据时出现乱码怎么回事?[已结贴,结贴人:wk123yh]
发表于:2007-10-26 04:31:48 楼主
客户端:
option   explicit
'发送数据
private   sub   command1_click()
dim   dx   as   double
dx   =   14
sock.senddata   dx
msgbox   ("data   sended")
end   sub

private   sub   command2_click()
'远程主机名
dim   remoteip   as   string
remoteip   =   inputbox("请输入服务器端的ip地址:",   "主机ip输入中……")
sock.remotehost   =   remoteip
'网络端口
sock.remoteport   =   5000
'发出连接命令
sock.connect
command1.enabled   =   false
end   sub
客户端有两个按钮,一个是建立连接(command2),一个是发送数据(command1),还有一个winsock控件(sock)

服务器端:
option   explicit
'定义常量
const   busy   as   boolean   =   false
const   free   as   boolean   =   true
'定义连接状态
dim   connectstate()   as   boolean

private   sub   command1_click()
redim   preserve   connectstate(0   to   1)
on   error   resume   next
connectstate(0)   =   free
connectstate(1)   =   free
'指定网络端口号
listener.localport   =   5000
'开始侦听
listener.listen
end   sub

private   sub   command2_click()
listener.close
end   sub


private   sub   listener_connectionrequest(byval   requestid   as   long)
dim   sockindex   as   integer
dim   socknum   as   integer
on   error   resume   next
form1.print   requestid   &   "连接请求"
'查找连接的用户数
socknum   =   ubound(connectstate)
if   socknum   >   49   then
form1.print   sockindex   &   ""
exit   sub
end   if
'查找空闲的sock
sockindex   =   findfreesocket()
'如果已有的sock都忙,而且sock数不超过15个,动态添加sock
if   sockindex   >   socknum   then
load   sock(sockindex)
end   if
connectstate(sockindex)   =   busy
sock(sockindex).tag   =   sockindex
'接受请求
sock(sockindex).accept   (requestid)
form1.print   sockindex   &   "接受请求"
end   sub

'客户断开,关闭相应的sock
private   sub   sock_close(index   as   integer)
if   sock(index).state   <>   sckclosed   then
sock(index).close
end   if
connectstate(index)   =   free
form1.print   index   &   "close"
end   sub

'接收数据
private   sub   sock_dataarrival(index   as   integer,   byval   bytestotal   as   long)
dim   dx   as   double
form1.print   "数据来自"   &   index
sock(index).getdata   dx,   vbdouble
form1.print   "dx="   &   dx
end   sub

'寻找空闲的sock
public   function   findfreesocket()
dim   sockcount,   i   as   integer
sockcount   =   ubound(connectstate)
for   i   =   0   to   sockcount
if   connectstate(i)   =   free   then
findfreesocket   =   i
exit   function
end   if
next   i
redim   preserve   connectstate(0   to   sockcount   +   1)
findfreesocket   =   ubound(connectstate)
end   function
服务器端有两个按钮和两个winsock控件,两个按钮是打开监听(command1)和关闭监听(command2),两个winsock控件是listener和sock(index)。现在这个程序是可以接收到数据的,但是,接收到的数据是双精度型的,现在我想把它改成字符串型的数据,我把客户端dx改成string,然后把服务器端改成
dim   dx   as   string
sock(index).getdata   dx
接收到的数据就变成相同的乱码了,请问各位高手,应该怎么改?
谢谢了!还有就是,我的积分为零了,实在没有分数可以给了,希望各位可以帮帮我!
发表于:2007-10-26 08:13:121楼 得分:0
这样不行吗?

private   sub   command1_click()  
dim   dx   as   string  
dx   =   "14"  
sock.senddata   dx  
msgbox   ("data   sended")  
end   sub  

private   sub   sock_dataarrival(index   as   integer,   byval   bytestotal   as   long)  
dim   dx   as   string  
form1.print   "数据来自"   &   index  
sock(index).getdata   dx
form1.print   "dx="   &   dx  
end   sub  
发表于:2007-10-26 08:43:372楼 得分:0
不行,这样以后的到的是乱码,固定的那几个字符
发表于:2007-10-26 10:17:573楼 得分:0
采用人工转换方法
在发送前发送的是byte数据,接受依旧接受byte数据

客户端:  
option   explicit  
'发送数据  
private   sub   command1_click()  
dim   dx   as   double  
dim   bytdata(7)   as   byte
dx   =   14  
call   copymemery(dx,bytdata(0),8)
sock.senddata   bytdata  
msgbox   ("data   sended")  
end   sub  

'接收数据  
private   sub   sock_dataarrival(index   as   integer,   byval   bytestotal   as   long)  
dim   dx   as   double  
dim   bytdata(7)   as   byte
form1.print   "数据来自"   &   index  
sock(index).getdata   bytdata
call   copymemory(bytdata(0),dx,8)
form1.print   "dx="   &   dx  
end   sub  


发表于:2007-11-04 17:51:474楼 得分:0
不好意思,后来行了,是因为我的客户端原来定义的文件是double类型的,所以穿过去后显示不了,至于乱码是机房的一台机器的原因,换了一台机器就没事了!
谢谢各位了!


快速检索

最新资讯
热门点击