你们中的一些人可能已经阅读了几天前我关于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'