Fortran Coder

标题: FORTRAN写TCP/IP协议 [打印本页]

作者: Free    时间: 2021-3-31 14:45
标题: FORTRAN写TCP/IP协议
编程新手,请问fortran语言如何实现tcp/ip功能,应该怎么去做,可以支付报酬[qq]635887815[/qq]

作者: vvt    时间: 2021-3-31 19:22
Fortran语法里没有这些内容,就像C语言,C++语言也没有这些内容一样。

我也不是很推荐用 Fortran 来完成这些事情。

如果你非要做,可以考虑封装一下操作系统的 socket 库。比如 windows 的 winsocket。

socket 的内容比较多。有 TCP,UDP 两种协议,还有客户端和服务器端。单播,组播等等。也不是三言两语可以说清楚。

很久以前,我封过一个简单的。需要 IVF 编译器才能正常编译使用。下面的范例,是做为 TCP 客户端的。其他的你看看代码,应该也容易写出来。

[Fortran] 纯文本查看 复制代码
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

SocketClass.f90

7.74 KB, 下载次数: 12


作者: lxde086606    时间: 2021-4-6 06:54
看不懂,先膜拜一下
作者: Free    时间: 2021-4-15 11:07
本帖最后由 Free 于 2021-5-8 21:19 编辑

...........
作者: charles    时间: 2023-4-12 16:26
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
参考https://github.com/modern-fortran/tcp-client-server




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2