当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: 马上结贴 ......
 ·关于数据库    »显示摘要«
    摘要: 我有两个问题希望请教大家: 1、如果我的网站架设在unix上,一般使用什么开发语言比较好(perl,php) 2、如果使用sql2000作数据库,我有大量的图片,我是将它存在数据库中好还是放在目录中用数据库记录文件名比较好。如果将图片放入数据库里边的话,速度会不会很慢. 3、我使用access做一个大概2000-10000条记录的网站数据库是否可以满足需要,稳定性会不会好,速度方面呢。 希......


很小的小问题关于winsock

关键代码如下:  
  With   Winsock2  
  .RemotePort   =   4000  
  .RemoteHost   =   "192.168.0.1"  
  .Bind   4001  
  End   With  
  Winsock2.SendData   Text1.Text  
  Debug.Print   Text1.Text   &   "   was   send"  
  Text1.Text   =   ""  
  End   If  
  ....  
  Private   Sub   Winsock2_DataArrival(ByVal   bytesTotal   As   Long)  
  Debug.Print   "datacomes"  
  Dim   tmp   As   String  
  Winsock2.GetData   tmp  
  tmp   =   "   message   from"   &   Winsock2.RemoteHost   &   "("   &   Winsock2.RemoteHostIP   &   ";"   &   Winsock2.RemotePort   &   ")"  
  Text2.Text   =   Text2.Text   +   vbCrLf   +   tmp  
  End   Sub  
   
  一共做了2个程序,完成聊天的工作,以上是程序一,第二个程序只是把localport和remoteport交换一下。想在同一台机器上测试一下,没想到不好用。  
  提示:  
  运行到winsock2.senddata   ...的时候出错  
  连接被远程计算机重置  
   
  请各位大虾多多指点,分不多了,先100吧!  
  在两台机器上测试有没有可能通过呢?  
  请指教!  
   
 

NO.1   作者: huayuxing

你同一台的端口是不是设成一样了,

NO.2   作者: softrain

用两个窗体,两个WINSOCK控件,一个服务器端,一个客户端。  
  formserver:  
  private   sub   form_load()  
  sckserver.localport=2001  
  sckserver.listen  
  end   sub  
  private   sub   sckserver_request(byval   requestid   as   long)  
  if   sckserver.state<>sckclosed   then  
  sckserver.closed  
  end   if  
  sckserver.accept   requestid  
  end   sub  
  formclient:  
  private   sub   command1_click()  
  if   sckclient.state=sckclosed   then  
  sckclient.connect   "192.168.0.1",2001   192.168.0.1指本机IP  
  end   if  
  end   sub  
  private   sub   sckclient_connected()  
  msgbox   "connect   ok"  
  end   sub  
  你可以参照一下。

NO.3   作者: softrain

只要能连接,就可以传输数据,在传输之前看有没有处于连接状态。

NO.4   作者: xfyxq

1.用udp协议  
  2.winsock1.RemotePort   =4000  
      winsock2.RemotePort=4001  
      winsock1.bind   4001  
      winsock2.bind   4000  
   
 

NO.5   作者: lgd211

用两个窗体,两个WINSOCK控件,一个服务器端,一个客户端。  
  formserver:  
  Dim   blnConnectID(30000)   As   Boolean           端口是否联接  
  Dim   lngConnectMax   As   Long                             联接的最大端口id  
   
  Private   Sub   Form_Load()  
           
          intMax   =   0  
          tcpServer(0).LocalPort   =   1001  
          tcpServer(0).Listen  
          frmclients.Show  
          blnConnectID(0)   =   True  
           
  End   Sub  
   
  Private   Sub   cmdSend_Click()  
  发送udp数据  
   
          Dim   i   As   Long  
           
          For   i   =   1   To   lngConnectMax  
                  If   blnConnectID(i)   =   True   Then   udpServer(i).SendData   txtSendData.Text  
          Next   i  
           
  End   Sub  
   
  Private   Sub   tcpServer_ConnectionRequest(Index   As   Integer,   ByVal   requestID   As   Long)  
  建立新的tcp和udp联接  
   
          Dim   i   As   Long  
           
          If   Index   =   0   Then  
                  For   i   =   1   To   30000             判断该端口是否已联接  
                          If   blnConnectID(i)   =   False   Then  
                                  Load   tcpServer(i)             建立tcp联接  
                                  tcpServer(i).LocalPort   =   0  
                                  tcpServer(i).Accept   requestID  
                                   
                                  Load   udpServer(i)             建立udp联接  
                                  udpServer(i).RemoteHost   =   tcpServer(i).RemoteHostIP  
                                  udpServer(i).RemotePort   =   1000  
                                  udpServer(i).Bind   "100"   +   CStr(i)  
                                  tcpServer(i).SendData   "100"   +   CStr(i)  
                                   
                                  blnConnectID(i)   =   True           该端口以占用  
                                  If   i   >   lngConnectMax   Then   lngConnectMax   =   i   是否是最大端口  
                                  Exit   For  
                          End   If  
                  Next   i  
        End   If  
           
  End   Sub  
   
  Private   Sub   tcpServer_DataArrival(Index   As   Integer,   ByVal   bytesTotal   As   Long)  
  接受tcp数据信息  
   
          Dim   str   As   String  
           
          tcpServer(Index).GetData   str  
          txtOutput.Text   =   str  
           
  End   Sub  
   
  Private   Sub   tcpServer_Close(Index   As   Integer)  
  关掉没联接的控件和端口  
           
          关掉控件  
          Unload   tcpServer(Index)  
          Unload   udpServer(Index)  
          blnConnectID(Index)   =   False       释放端口  
          While   blnConnectID(lngConnectMax)   =   False           检查最大端口号是否释放,是则减一  
                  lngConnectMax   =   lngConnectMax   -   1  
          Wend  
           
  End   Sub  
   
  Private   Sub   Form_Unload(Cancel   As   Integer)  
           
          Dim   i   As   Long  
           
          For   i   =   1   To   lngConnectMax       关掉控件  
                  Unload   tcpServer(Index)  
                  Unload   udpServer(Index)  
          Next   i  
           
  End   Sub  
  formclient:  
  Private   Sub   Command1_Click()  
           
          tcpClient.Connect  
           
  End   Sub  
   
  Private   Sub   Command2_Click()  
           
          tcpClient.SendData   txtsend.Text  
           
  End   Sub  
   
  Private   Sub   Form_Load()  
           
          tcpClient.RemoteHost   =   "192.168.150.19"  
          tcpClient.RemotePort   =   1001  
           
  End   Sub  
   
  Private   Sub   tcpClient_DataArrival(ByVal   bytesTotal   As   Long)  
           
          Dim   str   As   String  
           
          tcpClient.GetData   str  
          udpClient.RemoteHost   =   "192.168.150.19"  
          udpClient.RemotePort   =   1001  
          udpClient.Bind   1002  
          txtget.Text   =   str  
           
  End   Sub  
   
  Private   Sub   txtsend_Change()  
   
          tcpClient.SendData   txtsend.Text  
           
  End   Sub  
   
  Private   Sub   udpClient_DataArrival(ByVal   bytesTotal   As   Long)  
           
          Dim   str   As   String  
           
          udpClient.GetData   str  
          txtget.Text   =   str  
           
  End   Sub

NO.6   作者: sunxl

UDP   初步  
  创建   UDP   应用程序比创建   TCP   应用程序还要简单,因为   UDP   协议不需要显式的连接。在上面的   TCP   应用程序中,一个   Winsock   控件必须显式地进行“监听”,另一个必须使用   Connect   方法初始化连接。  
   
  UDP   协议不需要显式的连接。要在两个控件中间发送数据,需要完成以下的三步:    
   
  将   RemoteHost   属性设置为另一台计算机的名称。  
   
   
  将   RemotePort   属性设置为第二个控件的   LocalPort   属性。  
   
   
  调用   Bind   方法,指定使用的   LocalPort。    
  因为两台计算机的地位可以看成“平等的”,这种应用程序也被称为点到点的。为了具体说明这个问题,下面将创建一个“聊天”应用程序,两个人可以通过它进行实时的交谈。  
   
  要创建一个   UDP   伙伴,请按照以下步骤执行:    
   
  创建一个新的   Standard   EXE   工程。  
   
   
  将缺省的窗体的名称修改为   frmPeerA。  
   
   
  将窗体的标题修改为“Peer   A”。  
   
   
  在窗体中放入一个   Winsock   控件,并将其命名为   udpPeerA。  
   
   
  在“属性”页上,单击“协议”并将协议修改为   UDPProtocol。  
   
   
  在窗体中添加两个   TextBox   控件。将第一个命名为   txtSend,第二个命名为   txtOutput。  
   
   
  为窗体增加如下的代码。    
  Private   Sub   Form_Load()  
  控件的名字为   udpPeerA  
  With   udpPeerA  
  重点:必须将   RemoteHost   的值  
  修改为计算机的名字。  
  .RemoteHost=   "PeerB"    
  .RemotePort   =   1001       连接的端口号。  
  .Bind   1002                                 绑定到本地的端口。  
  End   With  
  frmPeerB.Show                                   显示第二个窗体。  
  End   Sub  
   
  Private   Sub   txtSend_Change()  
  在键入文本时,立即将其发送出去。  
  udpPeerA.SendData   txtSend.Text  
  End   Sub  
   
  Private   Sub   udpPeerA_DataArrival   _  
  (ByVal   bytesTotal   As   Long)  
  Dim   strData   As   String  
  udpPeerA.GetData   strData  
  txtOutput.Text   =   strData  
  End   Sub  
   
  要创建第二个   UDP   伙伴,请按照以下步骤执行:    
   
  在工程中添加一个标准窗体。  
   
   
  将窗体的名字修改为   frmPeerB。  
   
   
  将窗体的标题修改为“Peer   B”。  
   
   
  在窗体中放入一个   Winsock   控件,并将其命名为   udpPeerB。  
   
   
  在“属性”页上,单击“协议”并将协议修改为“UDPProtocol”。  
   
   
  在窗体上添加两个   TextBox   控件。将第一个命名为   txtSend,第二个命名为   txtOutput。  
   
   
  在窗体中添加如下的代码。    
  Private   Sub   Form_Load()  
  控件的名字为   udpPeerB。  
  With   udpPeerB  
  重点:必须将   RemoteHost   的值改为  
  计算机的名字。  
  .RemoteHost=   "PeerA"  
  .RemotePort   =   1002         要连接的端口。  
  .Bind   1001                                 绑定到本地的端口上。  
  End   With  
  End   Sub  
   
  Private   Sub   txtSend_Change()  
  在键入后立即发送文本。  
  udpPeerB.SendData   txtSend.Text  
  End   Sub  
   
  Private   Sub   udpPeerB_DataArrival   _  
  (ByVal   bytesTotal   As   Long)  
  Dim   strData   As   String  
  udpPeerB.GetData   strData  
  txtOutput.Text   =   strData  
  End   Sub  
   
  如果要试用上面的例子,按   F5   键运行工程,然后在两个窗体的   txtSend   TextBox   中分别键入一些文本。键入的文字将出现在另一个窗体的   txtOutput   TextBox   中。  
   
  关于   Bind   方法  
  在上面的代码中,在创建   UDP   应用程序时调用了   Bind   方法,这是必须的。Bind   方法的作用是为控件“保留”一个本地端口。例如,如果将控件绑定到   1001   号端口,那么其它应用程序将不能使用该端口进行“监听”。该方法阻止其它应用程序使用同样的端口。  
   
  Bind   方法的第二个参数是任选的。如果计算机上存在多个网络适配器,可以用   LocalIP   参数来指定使用哪一个适配器。如果忽略该参数,控件使用的将是计算机上“控制面板”设置中“网络”控制面板对话框中列出的第一个适配器。  
   
  在使用   UDP   协议的时候,可以任意地改变   RemoteHost   和   RemotePort   属性,同时始终保持绑定在同一个   LocalPort   上。TCP   协议与此不同,在改变   RemoteHost   和   RemotePort   属性之前,必须先关闭连接。  
 


 ·如何隐藏桌面的图标    »显示摘要«
    摘要: 谢谢了!!!!!! ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE