lamant 发表于 2014-7-4 13:20:16

(已解决)一个服务端、客户端,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

kk_lee69 发表于 2014-7-4 14:51:57

回复 1# lamant

请帮忙看看这个服务端能不能正常接收,Thanks!

請按下 F5 就可以知道 能不能正常 WORK!!

lamant 发表于 2014-7-4 15:09:57

本帖最后由 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

kk_lee69 发表于 2014-7-4 15:16:18

回复 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

一堆的案例足夠你找出原因的~~

lamant 发表于 2014-7-4 15:19:19

回复 4# kk_lee69

哥,这些例子我也看了很多,搜索了不少。就是没解决问题。
我贴的程序也没几行,超简单的。

kk_lee69 发表于 2014-7-4 15:32:00

回复 5# lamant

呵呵我對這個不熟也沒興趣研究這個所以幫不了你

只是我能確定的是把那些所謂的簡單聊天的程式 把裡面的 程式語法弄懂了一段一段拆解開來,知道原理後,你的沒幾行的程序肯定有解的

shqf 发表于 2014-7-4 15:43:08

楼主说看了很多例子,可服务端例子中TCPAccept()一句都 是放在while循环里的呀。

lamant 发表于 2014-7-4 16:16:09

本帖最后由 lamant 于 2014-7-4 16:27 编辑

回复 7# shqf
刚刚测试了一下,放外边跟放里边是一样的。
socket都是好的。

shqf 发表于 2014-7-4 17:02:47

本帖最后由 shqf 于 2014-7-4 17:10 编辑

楼主,服务端17句放到20行,服务端应该没问题了。
可客户端代码问题大了。根本不能运行啊!
你确信运行了不报错?????
你有无用SciTE写脚本啊?里面菜单-工具-语法检查,你试一下,客户端代码问题一大堆,if与endif都没配对啊!

lamant 发表于 2014-7-5 08:52:00

回复 9# shqf

哥我重新整了一下代码。这次调试没问题。之前是因为我有一个ini文件,随手改了一下。

shqf 发表于 2014-7-6 16:52:04

服务端改得太多,又不对,存在 31和45行,$ConnectedSocket = TCPAccept($iSocket)一句等于又在循环外啊。去掉 31和45行,其他都不要动。
再调试客户端,不行的话,客户端按照帮助中的例子,只保留必要的发送功能,行了以后,再慢慢加上其他代码 吧。

lamant 发表于 2014-7-7 11:57:25

回复 12# shqf


    确认是套接字错误了!@error=-1!
但是不知道怎么弄!!!

wangms 发表于 2014-7-8 15:14:28

学习。。。。。。。。。。。。。

lamant 发表于 2014-7-9 12:27:20

回复 12# shqf


    谢谢兄弟,问题解决了。
    接收时的套接字用错了。应该用accept的套接字。
页: [1]
查看完整版本: (已解决)一个服务端、客户端,Socket正常,但不能接受到客户端数据。 SOS...