[Fortran] 纯文本查看 复制代码
subroutine exchangedata(iDof,iblock,dpred,rfoutput)
use ws2_32
use kernel32
character*500 dpred
character*500 d
integer iDof,iblock
character*500 rfoutput
dimension fdpred(iblock)
type t_sockaddr_union
sequence
union
map
type(t_sockaddr_in)sockAddrIn
end map
map
type(t_sockaddr)sockAddr
end map
end union
end type t_sockaddr_union
parameter(iwinsock_v2_2=x'202',isuccess=0)
type(t_wsadata) WSAInfo !版本信息结构
type (t_sockaddr_union) ConnectionInfo !Client_add
type T_client_server_message
union
map
character*(500) buffer
end map
map
character*(500) bufferout
end map
end union
end type
type(T_client_server_message) ClientServerMessage
Character(len=15) host
Integer(kind=2) iport
c**************************************************************************
! Initialize Winsock v2
istatus=WSAStartup(iwinsock_v2_2,WSAInfo)
If (istatus.NE.isuccess)then
write(*,*)'WSAStartup-',istatus
stop
end if
! 创建套接字
isender = socket( af_inet , SOCK_STREAM , ipproto_tcp )
if (isender.EQ.invalid_socket) then
write(*,*)'socket-',invalid_socket
istatus=WSACleanup()
end if
!设置连接地址
host='127.0.0.1'
iport=5001
ConnectionInfo%sockaddrin%sin_family = af_inet
ConnectionInfo%sockaddrin%sin_port = htons( iport )
ConnectionInfo%sockaddrin%sin_addr%s_addr =
* inet_addr( host( 1 : len_trim(host) ) )
istatus = connect(isender, %ref(ConnectionInfo%sockaddr),
* sizeof(ConnectionInfo%sockaddr))
If (istatus.EQ.socket_error) then
write(*,*)"连接失败"
end if
c*****************************************************************************************
! 接收数据
ireceivelen=recv(isender,ClientServerMessage%buffer,500,0)
if(ireceivelen<0)then
write(*,*)"连接失败"
stop
else
dpred=ClientServerMessage%buffer
write(*,*)"sever say:"
write(*,*) dpred
read(dpred,*) fdpred
write(*,*) fdpred
end if
c***********************************************************************************
! 发送数据
write(*,*)"please enter message:"
write(*,*) rfoutput
ClientServerMessage%bufferout=rfoutput
isendlen=send(isender,ClientServerMessage%bufferout,500,0)
write(*,*) ClientServerMessage%bufferout
rfoutput=ClientServerMessage%bufferout
write(*,*) rfoutput
if(isendlen<0)then
write(*,*)"连接失败"
end if
istatus=closesocket(isender)
istatus=WSACleanup()
end subroutine
您好,这是我看着网上编的一个子程序,但是在传输数据时出现了问题。传回来的字符串类型,但是字符串后面有很多空格。然后我怎样将字符串类型转化转化为一个向量。同时一个数据向量怎样发送出去呢?
|