在使用TCP的Fortran 90中字符串比较失败



你们中的一些人可能已经阅读了几天前我关于TCP与Fortran的问题。我得到了我已经解决的问题,但现在又遇到了一个新的问题。

当我尝试比较从客户端发送到服务器的字符串时,比较总是失败。这是我为服务器准备的代码:

!   To compile:
!   gfortran  server.f90 -o server.x -L"../../../libmsock/libmsock/" -lmsock
!   change path to libmsock to reflect your system
PROGRAM MSockets_server
    USE ISO_C_BINDING  !use this for ability to use c code
    USE MSockets  ! this provides the bindings to the c functions for TCP
    implicit none
    character(72) ::  process
!   .....................Initializations for TCP..............................
    INTEGER(C_SHORT)                    :: port
    INTEGER(C_INT)                      :: sockfd
    CHARACTER(KIND=C_CHAR, LEN=102400)  :: buffer
    INTEGER(CC_SIZE_T)                  :: count
    INTEGER(C_INT)                      :: length, error
!   ..........................Begin Processes.................................
!   Opening the socket
    port=HUGE(port) ! Most likely unused port
    sockfd=ServerSocket(port,2_c_int) ! It will return only once a connection is made
    IF(sockfd<0) STOP "Failed to open server socket"
    write(6,*) "Simulator Connected!"
    do
        length = sockGets(sockfd,buffer,int(len(buffer),CC_SIZE_T))
        if(length<0) exit
        if(length>0) then
            read(buffer,*) process  ! interpretting data sent into buffer
            write(6,*) process
            write(6,*) process == 'test' !This always evaluates to false even if process is "test"
            stop
        endif
    enddo
    stop
END PROGRAM !program

当我在客户端输入"test"时,我无法弄清楚为什么这种比较失败。有人能看出我犯的错误吗?

如果您想尝试一下,您可以访问包含所有文件的存储库:https://aliounis@bitbucket.org/aliounis/client_server_interaction.git

要编译,您需要从http://www.muquit.com/muquit/software/libmsock/libmsock.html下载文件并首先编译它们。

我正在用gfortran编译。

谢谢你的帮助,

安德鲁

返回给process的字符串可能是空终止的,并且不完全匹配test。我想试试这个比较:process(1:4) == 'test'

最新更新