当前位置:编程学习 > VB >>

一个客户端有两个Winsock控件连接服务器端,怎样将这两个Winsock关联起来。

问题是这样的。我服务器端有四个Winsock控件,其中两个是分别监听两个端口接受每个客户端的两个winsock。服务器端两个Winsock数组,分别接受客户端两个Winsock请求,现在的问题是,我怎样将同一个客户端发出的两个Winsock客户端请求在服务器端的两个Winsock数组关联起来。比如,客户机1分别请求了。就建立了两个Winsock。服务器端两个Winsock数组分别响应,接收的分别是两个数据中的winsock3(index1)和winsock4(index2),怎样让index1和index2关联起来,好让服务器端通过index1和index2的关联向不同客户端发送数据。 --------------------编程问答-------------------- 没看懂你的意思,帮顶 --------------------编程问答-------------------- 是这样的,就是一个客户端需要两个Winsock控件向服务器端发送请求,现在的问题服务器端如何识别一个客户端的两个连接。也就是说向服务器端向客户端发送数据时,要知道哪两个连接是来自同一个客户端的。 --------------------编程问答-------------------- RemoteHost
RemoteHostIP --------------------编程问答-------------------- 假如很多客户端都是通过代理登陆呢?也就是说很多客户端都是通过同一个代理IP。这样还是不能识别啊。有没有更好的方法。 --------------------编程问答-------------------- 你让客户请求连接的时候发送一身份数据给你服务器判断就行了 --------------------编程问答-------------------- Socket在连接不是只有Connect吗,在连接的时候又不能向服务器发送任何信息,只有连接啊。 --------------------编程问答-------------------- 有没有高人能给出比较好的办法。现在的问题主要是客户端向服务器端发送Connect连接请求时,好像Winsock控件只有请求,不能附带任何其他标志。 --------------------编程问答-------------------- 建立个数组 
private cn1cn2(100)
当winsock3(index1) 和 winsock4(index2)于客户机建立连接的时候
cn1cn2(index1)=index2
给客户发送数据的时候
winsock3(index1).senddate xxx
winsock4(cn1cn2(index1).senddate yyy
不知道能不能满足你要求
--------------------编程问答-------------------- winsock4(cn1cn2(index1).senddate yyy
少个括号
winsock4(cn1cn2(index1)).senddate yyy --------------------编程问答-------------------- 如果按照上面代码的话,怎么能确定winsock3(index1)和winsock4(index2)是来自于同一个客户端请求, --------------------编程问答-------------------- 当2个端口都建立好连接后 服务器发送端口关联标示
比如
winsock2.senddata "DONE"
在winsock4收到后在DataArrival事件中
winsock4(index).getdata(k)
if  k="DONE" then winsock4(index).senddata "DONE"&index
在winsock2收到后在DataArrival事件中
winsock2.getdata(k)
IF left(k,4)="DONE" then 
k=right(k,len(k)-4)
winsock1.senddata "BIND" & k
ENDIF
在winsock3收到后在DataArrival事件中
winsock3(index).getdata(k)
IF left(k,4)="BIND" THEN 
K=right(k,len(k)-4)
CN1CN2(INDEX)=K   '关联winsock3 和 4 的关键一句
ENDIF


--------------------编程问答-------------------- 这种方法比较不错,谢谢了。楼上的,有没有qq,加你。 --------------------编程问答-------------------- 以前的QQ好久不用密码忘记了
新申请的714875127

--------------------编程问答-------------------- Private Sub Form_Load()

Dim myip As String
Dim netbcaddress As String

myip = Winsocklogin.LocalIP
netbcaddress = "192.168.1.255"
Winsocklogin.RemoteHost = netbcaddress
Winsocklogin.RemotePort = Int(9400)
Winsocklogin.LocalPort = Int(9401)
Winsocklogin.Bind
Winsocklogin.SendData "dgy.." & myip   ' C-ip have send



Winsocklogin.Close
Winsocklogin.RemoteHost = ""
Winsocklogin.RemotePort = Int(9400)
Winsocklogin.LocalPort = Int(9401)
Winsocklogin.Bind    ' winsoklogin have ok
Private Sub Winsocklogin_DataArrival(ByVal bytestotal As Long)
Dim strdata As String
Winsocklogin.GetData strdata
If Trim(strdata) <> "" Then

WinsockC.RemoteHost = strdata
WinsockC.RemotePort = Int(9998)
WinsockC.LocalPort = Int(9999)

WinsockC.Connect
Winsocklogin.Close
End If
End Sub --------------------编程问答-------------------- 你用remoteip和remoteport识别就可以了
ip可能一样,但是端口总不会一样吧? --------------------编程问答-------------------- 楼上的,是这样的,如果同一个程序在一台电脑上同时运行几次呢?还有就是如果用代理的话,出口都是相同的IP地址,然后就是同一个电脑的两个连接请求,到了服务器端也是无法识别的,因为有太多的客户端通过同一个地址出去了。个人觉得根据IP地址和端口号是不适合的。
补充:VB ,  网络编程
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,