| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1287 人关注过本帖, 1 人收藏
标题:请教 winsock通信
只看楼主 加入收藏
yshjyc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-7-24
结帖率:100%
收藏(1)
 问题点数:0 回复次数:6 
请教 winsock通信
在一个窗体上最多可以有几个winsock控件,我编了一个程序,一个窗体上有两个winsock控件,一个用于接收,一个用于发送,但是在发送信息时,能和别人连接上,信息发送不出去?请问这是怎么回事?


高手,帮帮忙。
搜索更多相关主题的帖子: winsock 通信 
2008-07-24 18:59
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
看计算机性能。反正2个肯定是不存在问题的。

你应该检查你的程序逻辑,而不是怀疑winsock有多弱……
2008-07-24 19:01
yshjyc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-7-24
收藏
得分:0 
这是我的代码,你能看一下吗?
Option Explicit
Dim i As Integer
Dim A() As String
Dim sql As String
Dim rs_deal As New ADODB.Recordset
Dim sql1 As String
Dim B() As String
Dim t1 As Integer
Dim t2 As Integer
Dim rs_fs As New ADODB.Recordset
Dim m As String
 Private Sub form_load()
   Text2(0).Text = Format(Date, "yyyy-mm-dd")
   Winsock1.Protocol = sckTCPProtocol
   Winsock1.LocalPort = 3333
   Winsock1.Listen
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
   If Winsock1.State <> sckClosed Then
         Winsock1.Close
         Winsock1.Accept requestID
   End If
End Sub
Private Sub Winsock1_dataarrival(ByVal bytestotal As Long)
   On Error Resume Next
   Dim clientdata As Variant
   Winsock1.GetData clientdata, vbString
   inf = clientdata
End Sub
Private Sub Winsock1_close()
   Winsock1.Close
   If inf = "" Then
      Winsock1.Listen
   Else
      inf_save
      inf_fs
   End If
End Sub
Private Sub inf_save()
   Adodc1.connectionstring = "provider =microsoft.jet.oledb.4.0;data source=bus.mdb;jet oledb:database password ='123'"
   Adodc1.RecordSource = "select * from 运行信息"
   Adodc1.Refresh
   Adodc1.Recordset.AddNew
   Text2(0).Text = Format(Date, "yyyy-mm-dd")
   A = Split(inf, "/")
   For i = 1 To 8
       Text2(i).Text = A(i - 1)
   Next i
   sql = "select 站牌名 from 站牌信息 where 所属路线 = '" & A(0) & "' and 站牌编号= '" & A(7) & "'"
   rs_deal.Open sql, conn, adOpenKeyset, adLockPessimistic
   Text2(9).Text = rs_deal.Fields(0)
   station = Text2(9).Text
   rs_deal.Close
   Adodc1.Recordset.Update
   For i = 1 To 9
       Text2(i).Text = ""
   Next i
End Sub
Private Sub inf_fs()
   B = Split(inf, "/")
   If B(7) < 200 Then
       sql1 = "select 站牌编号,IP,端口 from 站牌信息 where 站牌编号>= '" & B(7) & "' and 站牌编号 < '104' and 所属路线 = '" & B(0) & "'order by 站牌编号"
       rs_fs.Open sql1, conn, adOpenKeyset, adLockPessimistic
   Else
       sql1 = "select 站牌编号,IP,端口 from 站牌信息 where 站牌编号>= '" & B(7) & "' and 站牌编号 <='300'  and 所属路线 = '" & B(0) & "'order by 站牌编号"
       rs_fs.Open sql1, conn, adOpenKeyset, adLockPessimistic
   End If
   Do While Not rs_fs.EOF
      t1 = rs_fs.Fields(0) - B(7)
      t2 = 5 * t1
      m = B(0) & "" & t2 & "" & B(5) & "" & station
      Winsock2.Protocol = sckTCPProtocol
      Winsock2.RemoteHost = rs_fs.Fields(1)
      Winsock2.RemotePort = CLng(rs_fs.Fields(2))
      Winsock2.Connect
      Do While Not Winsock2.State = sckConnected
         DoEvents
      Loop
      Winsock2.SendData m
      Winsock2.Close
      m = ""
      rs_fs.MoveNext
   Loop
   rs_fs.Close
   Winsock1.Listen
End Sub
2008-07-24 21:22
octillion
Rank: 1
等 级:新手上路
帖 子:195
专家分:0
注 册:2008-7-24
收藏
得分:0 
程序代码:
      Winsock2.Connect
      Do While Not Winsock2.State = sckConnected
         DoEvents
      Loop
      Winsock2.SendData m


看看别人怎么用Connect和SendData的。
2008-07-24 21:32
yshjyc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-7-24
收藏
得分:0 
请教
4楼的,拜托能说清楚一点吗?
2008-07-25 10:10
octillion
Rank: 1
等 级:新手上路
帖 子:195
专家分:0
注 册:2008-7-24
收藏
得分:0 
随便找一个用到Winsock的TCP通信的程序,看看人家把SendData写在哪里。还不行也可以看帮助。

其实等到Connect调用“完成”之后,是不允许SendData的。显然Connect调用之前也不能SendData,那什么时候SendData呢?看Winsock控件的事件。
2008-07-25 11:56
yshjyc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-7-24
收藏
得分:0 
请教楼上
我希望程序能够自动执行?
如果要这样该怎么改呢?
2008-07-25 15:15
快速回复:请教 winsock通信
数据加载中...
 
   



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

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