Free 发表于 2021-3-31 14:45:00

FORTRAN写TCP/IP协议

编程新手,请问fortran语言如何实现tcp/ip功能,应该怎么去做,可以支付报酬635887815

vvt 发表于 2021-3-31 19:22:33

Fortran语法里没有这些内容,就像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

lxde086606 发表于 2021-4-6 06:54:21

看不懂,先膜拜一下

Free 发表于 2021-4-15 11:07:32

本帖最后由 Free 于 2021-5-8 21:19 编辑

...........

charles 发表于 2023-4-12 16:26:18

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,这里是否是笔误呢?

风平老涡 发表于 2023-4-13 21:26:16

参考https://github.com/modern-fortran/tcp-client-server
页: [1]
查看完整版本: FORTRAN写TCP/IP协议