FORTRAN写TCP/IP协议
编程新手,请问fortran语言如何实现tcp/ip功能,应该怎么去做,可以支付报酬635887815Fortran语法里没有这些内容,就像C语言,C++语言也没有这些内容一样。
我也不是很推荐用 Fortran 来完成这些事情。
如果你非要做,可以考虑封装一下操作系统的 socket 库。比如 windows 的 winsocket。
socket 的内容比较多。有 TCP,UDP 两种协议,还有客户端和服务器端。单播,组播等等。也不是三言两语可以说清楚。
很久以前,我封过一个简单的。需要 IVF 编译器才能正常编译使用。下面的范例,是做为 TCP 客户端的。其他的你看看代码,应该也容易写出来。
Program Main
Use ws2_32
use SocketClass
implicit none
type(TCP_Socket) :: conn
character(len=15) :: IP
integer :: j
IP = "127.0.0.1"
j = Socket_Init()
j = conn%Conn( SOCK_STREAM , IPPROTO_TCP , IP , 4488 )
write(*,*) j
j = conn%Send("Hello",5)
write(*,*) j
j = conn%DisConn()
call Socket_UnInit()
End Program Main 看不懂,先膜拜一下 本帖最后由 Free 于 2021-5-8 21:19 编辑
........... vvt 发表于 2021-3-31 19:22
Fortran语法里没有这些内容,就像C语言,C++语言也没有这些内容一样。
我也不是很推荐用 Fortran 来完成这 ...
这是SocketClass里面的部分代码
sockaddrin % sin_family = af_inet
sockaddrin % sin_port = htons( port )
sockaddrin % sin_addr % s_addr = inet_addr( host( 1 : len_trim(host) ) // c_null_char )
iRes = Connect(this%hSocket, loc(sockaddrin), c_sizeof(sockaddrin))
这是之前您的代码:
ConnectionInfo.sockaddrin.sin_family = af_inet
ConnectionInfo.sockaddrin.sin_port = htons( port )
ConnectionInfo.sockaddrin.sin_addr%s_addr = inet_addr( host( 1 : len_trim(host) ) )
status = Connect(hSocket, %ref(ConnectionInfo%sockaddr), sizeof(ConnectionInfo%sockaddr))
对比一下,不难看出,在连接部分以前采用的是sockaddr,但是在SocketClass中采用的是sockaddrin,这里是否是笔误呢? 参考https://github.com/modern-fortran/tcp-client-server
页:
[1]