有个程序,在局域网里面没问题,但把服务端放到WEB服务器,就不能正常
搞了几天了,还是上CSDN问问吧
服务端
Private Sub Winsockserver_ConnectionRequest(ByVal requestID As Long)
If Winsockserver.State <> sckClosed Then Winsockserver.Close
Winsockserver.Accept requestID
MSGBOX(Winsockserver.state)               '#########这里返回7
MSGBOX(Winsockserver.remotePort)   '##这里每次显示的PORT都不一样,客户端已经指定了Localport=21
End SubPrivate Sub Winsockserver_DataArrival(ByVal bytesTotal As Long)
MsgBox ("ok")      ' 这里没有执行
End Sub客户端
Private Sub Command1_Click()If ws.State <> sckClosed Then
    ws.Close
End Ifws.LocalPort = 21
ws.RemoteHost = "2**.2**.2**.***"      ' 这个IP绝对正确的
ws.RemotePort = 21ws.Connect
msgbox(ws.state)          ' 发觉这里不管什么状态总是返回7,就算把服务端关了,这里也是显示7End SubPrivate Sub WinsockClient_Connect()
ws.SendData ("abc")                 ' 服务端完成接收不到这里发送的数据
End Sub21端口绝对能用,因为WEB服务器的FTP服务器和客户机能正常链接的,并且我是退出了FTP服务器后再运行我的服务端
--------------------------------------
如果服务端在我的局域网内的机器,程序就能正常使用。服务端放到外面的WEB服务器就不行急需大家帮忙

解决方案 »

  1.   

    21端口是默认的 FTP 端口,Web 服务可能本身就打开的 FTP 服务,所以你客户端连接的不是你自己的程序而是 FTP 服务。
    改用其他端口试试。
      

  2.   


    MSGBOX(Winsockserver.state)              '#########这里返回7 
    MSGBOX(Winsockserver.remotePort)  '##这里每次显示的PORT都不一样,客户端已经指定了
    注释掉msgbox 使过程挂起,使类无法响应后续的事件
      

  3.   


    请教:如果服务端没有打开FTP服务,连接21端口,是否有问题?
      

  4.   

    如无必要,建议使用9000以上的端口号,
    1000以下及1000左右的端口,很多被操作系统(尤其是服务器操作系统如windows2003)默认为专用端口,很可能造成不必要的麻烦。如端口号 协议 关键词 UNIX 关键词 描述
    1 TCP TCPMUX - TCP 复用器
    7 TCP/UDP ECHO echo 回送
    9 TCP/UDP DISCARD discard 丢弃
    15 TCP/UDP - netstat 网络状态程序
    20 TCP FTP-DATA ftp-data 文件传输协议(数据)
    21 TCP FTP ftp 文件传输协议
    22 TCP/UDP SSH ssh 安全 Shell 远程登录协议
    23 TCP TELNET telnet 远程登录
    25 TCP SMTP smtp 简单邮件传输协议
    37 TCP/UDP - time 时间
    42 TCP/UDP NAMESERVER name 主机名字服务器
    43 TCP/UDP NICNAME whois 是谁
    53 TCP/UDP DOMAIN nameserver 域名服务器
    67 UDP BOOTPS bootps 引导协议服务器
    68 UDP BOOTPC bootpc 引导协议客户
    69 UDP TFTP tftp 简单文件传送协议
    79 TCP FINGER finger Finger
    80 TCP HTTP http 超文本传输协议
    88 TCP KERBEROS kerberos Kerberos 协议
    93 TCP DCP - 设备控制协议
    101 TCP HOSTNAME hostnames NIC 主机名字服务器
    110 TCP POP3 pop3 邮局协议版本 3
    111 TCP/UDP SUNRPC sunrpc Sun Microsystems RPC
    119 TCP NNTP nntp USENET 新闻传送协议
    123 UDP NTP ntp 网络时间协议
    139 TCP NETBIOS-SSN - NETBIOS 会话协议
    161 UDP - snmp 简单网络管理协议
    162 UDP - snmp-trap SNMP 陷阱
    389 TCP LDAP ldap 轻量目录访问协议
    443 TCP HTTPS https 安全 HTTP 协议
    513 UDP - who UNIX rwho daemon
    514 UDP - syslog 系统日志
    525 UDP - timed UNIX time daemon
    546 TCP DHCP-CLIENT dhcp-client 动态主机配置协议客户
    547 TCP DHCP-SERVER dhcp-server 动态主机配置协议服务器
    等等。
     
      

  5.   

    如果你的服务端程序没开,那么就会连接失败。
    你可以在服务端的命令行中用下面 netstat 命令进行确认,不同的输出用:
    netstat -a
    netstat -an
    netstat -b
      

  6.   

    MSGBOX(Winsockserver.state)              '#########这里返回7 
    MSGBOX(Winsockserver.remotePort)  '##这里每次显示的PORT都不一样,客户端已经指定了Localport=21 
    首先,如果你的服务端里面有msgbox,那么它会挂起程序导致程序无法响应(不过我相信你写这个是用来测试的吧?)第二,客户端指定LocalPort服务器看到客户端连接的端口不同是很正常的,因为你的客户端在局域网内(也就是NAT),NAT有可能让你的连接在外部看来ip和端口都不同(这要看看你的是什么类型的NAT了),其实你根本没必要给客户端指定一个LocalPort,系统会自动分配的(你设置LocalPort=0就好了)