(已解决)一个服务端、客户端,Socket正常,但不能接受到客户端数据。 SOS...
本帖最后由 lamant 于 2014-7-9 12:26 编辑现在服务端接收不到客户端的信息,收不到啊!收不到啊!收不到啊!
经测试服务端、客户端的socket是OK的。(如果connectsocket不等于-1就弹框,果然弹了!)
客户端在楼下。
客户端+服务端总体,想实现的是:客户端电脑上的一个TXT文本被修改了,客户端发现并读取该TXT的最后一行,传递给服务端。
看了很多例子,帮助文档,无奈理解能力太差,实在弄不明白,到底是客户端发送有问题呢,还是服务端接收有问题。
ip.ini文件内容:
[服务器地址]
IP=127.0.0.1
Port=65432Opt('TrayAutoPause', 0)
ssetup()
Func ssetup()
TCPStartup()
Global $S_IP, $S_Port, $iSocket
$S_IP = IniRead("iP.ini", "服务器地址", "IP", "")
$S_Port = IniRead("iP.ini", "服务器地址", "Port", "")
$iSocket = TCPListen($S_IP, $S_Port)
If $iSocket = -1 Then Exit ; 创建监听不成功就退出
EndFunc
Local $sRecv, $StringRev, $ConnectedSocket
While 1
$ConnectedSocket = TCPAccept($iSocket)
If $ConnectedSocket <> -1 Then
MsgBox(0,"服务端检测到连接", "binggo!")
while 1
$sRecv = TCPRecv($iSocket, 2048)
If $sRecv <> "" Then
MsgBox(0,"服务端接收到数据", "binggo!") ;接收到不为空的数据,弹框提示! 可是这个框框从来没有弹出来过!
$StringRev =BinaryToString($sRecv, 4)
MsgBox(0,"服务端提示",$StringRev) ;弹框提示客户端传来的读取到的最后一行文本。也是从来没有成功过!
EndIf
WEnd
EndIf
WEnd
;OnAutoItExitRegister("ex1") ;因为服务端要常开,因此不需要此段?
;Funcex1()
;TCPCloseSocket($iSocket)
;TCPShutdown()
;EndFunc 回复 1# lamant
请帮忙看看这个服务端能不能正常接收,Thanks!
請按下 F5 就可以知道 能不能正常 WORK!! 本帖最后由 lamant 于 2014-7-5 11:48 编辑
回复 2# kk_lee69
楼上的大哥,看来我的表达不清楚。
按F5运行没出错。
贴上客户端吧。我想实现的是客户端电脑上的一个TXT文本"D:\AutoIt3\1.txt"被修改了,客户端发现并读取该TXT (D:\AutoIt3\1.txt) 的最后一行,传递给服务端。
我真是看了很多帮助文档,查了很多例子。就是不知道问题出在哪。#include <WinAPIFiles.au3>
#include <APIFilesConstants.au3>
#include <WinAPI.au3>
#include <MsgBoxConstants.au3>
Opt('TrayAutoPause', 0)
Global Const $sPath = "D:\AutoIt3"
Global $hObj
$hObj = _WinAPI_FindFirstChangeNotification($sPath, $FILE_NOTIFY_CHANGE_LAST_WRITE)
Local $tObj = DllStructCreate('ptr;ptr')
Local $pObj = DllStructGetPtr($tObj)
DllStructSetData($tObj, 1, $hObj)
TCPStartup()
;OnAutoItExitRegister("ex1")
Global $S_IP, $S_Port, $iSocket
$S_IP = IniRead("iP.ini", "服务器地址", "IP", "")
$S_Port = IniRead("iP.ini", "服务器地址", "Port", "")
$iSocket = TCPConnect($S_IP, $S_Port)
If $iSocket = -1 Then Exit
Local $ID, $sFileRead, $str1, $strl_1
$Str1 = 1
While 1
Sleep(100)
$ID = _WinAPI_WaitForMultipleObjects(1, $pObj, 0, 0)
Switch $ID
Case 0
$sFileRead = FileReadLine("D:\AutoIt3\1.txt",-1)
if$sFileRead <> $Str1 Then ;与上一次读取的最后一行比较,如果不一样就输出
MsgBox(0,"客户端提示",$sFileRead) ;程序运行正常,这个框框读取的值是正确的。
$str1 = $sFileRead
$str1_1 = StringToBinary($sFileRead, 4)
TCPSend($iSocket, $str1_1) ;发送读取到的最后一行文本到服务端,好像没有发送出去
EndIf
Case Else
ContinueLoop
EndSwitch
If Not _WinAPI_FindNextChangeNotification($hObj) Then Exit
WEnd
Funcex1()
TCPCloseSocket($iSocket)
TCPShutdown()
EndFunc 回复 3# lamant
一个简单的局域网群聊天示例
http://www.autoitx.com/forum.php?mod=viewthread&tid=37124&highlight=%C1%C4%CC%EC
简易聊天工具~源码公开~供新手YY
http://www.autoitx.com/forum.php?mod=viewthread&tid=17910&highlight=%C1%C4%CC%EC
http://www.autoitx.com/search.php?searchid=161&orderby=lastpost&ascdesc=desc&searchsubmit=yes
一堆的案例足夠你找出原因的~~ 回复 4# kk_lee69
哥,这些例子我也看了很多,搜索了不少。就是没解决问题。
我贴的程序也没几行,超简单的。 回复 5# lamant
呵呵我對這個不熟也沒興趣研究這個所以幫不了你
只是我能確定的是把那些所謂的簡單聊天的程式 把裡面的 程式語法弄懂了一段一段拆解開來,知道原理後,你的沒幾行的程序肯定有解的 楼主说看了很多例子,可服务端例子中TCPAccept()一句都 是放在while循环里的呀。 本帖最后由 lamant 于 2014-7-4 16:27 编辑
回复 7# shqf
刚刚测试了一下,放外边跟放里边是一样的。
socket都是好的。 本帖最后由 shqf 于 2014-7-4 17:10 编辑
楼主,服务端17句放到20行,服务端应该没问题了。
可客户端代码问题大了。根本不能运行啊!
你确信运行了不报错?????
你有无用SciTE写脚本啊?里面菜单-工具-语法检查,你试一下,客户端代码问题一大堆,if与endif都没配对啊! 回复 9# shqf
哥我重新整了一下代码。这次调试没问题。之前是因为我有一个ini文件,随手改了一下。 服务端改得太多,又不对,存在 31和45行,$ConnectedSocket = TCPAccept($iSocket)一句等于又在循环外啊。去掉 31和45行,其他都不要动。
再调试客户端,不行的话,客户端按照帮助中的例子,只保留必要的发送功能,行了以后,再慢慢加上其他代码 吧。 回复 12# shqf
确认是套接字错误了!@error=-1!
但是不知道怎么弄!!! 学习。。。。。。。。。。。。。 回复 12# shqf
谢谢兄弟,问题解决了。
接收时的套接字用错了。应该用accept的套接字。
页:
[1]