溫馨提示×

Ubuntu上Fortran網絡編程如何實現

小樊
42
2025-05-27 23:39:16
欄目: 智能運維

在Ubuntu上進行Fortran網絡編程,你可以使用GNU Fortran編譯器(gfortran)和套接字編程接口。以下是一個簡單的示例,展示了如何在Fortran中創建一個TCP服務器和客戶端。

1. 安裝gfortran

首先,確保你已經安裝了gfortran。如果沒有安裝,可以使用以下命令進行安裝:

sudo apt update
sudo apt install gfortran

2. 創建TCP服務器

創建一個名為server.f90的文件,并添加以下代碼:

program server
    use iso_c_binding
    implicit none

    integer, parameter :: port = 12345
    integer :: server_socket, client_socket
    integer :: addr_len, status
    character(len=1024) :: buffer
    type(c_ptr) :: addr

    ! 創建套接字
    server_socket = socket(AF_INET, SOCK_STREAM, 0)
    if (server_socket < 0) then
        print *, "Error creating socket"
        stop
    end if

    ! 綁定套接字到端口
    addr = c_loc(port)
    status = bind(server_socket, addr, sizeof(port))
    if (status < 0) then
        print *, "Error binding socket"
        stop
    end if

    ! 監聽連接
    status = listen(server_socket, 5)
    if (status < 0) then
        print *, "Error listening on socket"
        stop
    end if

    print *, "Server is listening on port", port

    ! 接受連接
    addr_len = sizeof(port)
    client_socket = accept(server_socket, addr, addr_len)
    if (client_socket < 0) then
        print *, "Error accepting connection"
        stop
    end if

    print *, "Client connected"

    ! 接收數據
    status = recv(client_socket, buffer, sizeof(buffer), 0)
    if (status < 0) then
        print *, "Error receiving data"
        stop
    end if

    print *, "Received message:", trim(adjustl(buffer))

    ! 發送響應
    buffer = "Hello from server!"
    status = send(client_socket, buffer, sizeof(buffer), 0)
    if (status < 0) then
        print *, "Error sending data"
        stop
    end if

    ! 關閉套接字
    close(client_socket)
    close(server_socket)

end program server

3. 創建TCP客戶端

創建一個名為client.f90的文件,并添加以下代碼:

program client
    use iso_c_binding
    implicit none

    integer, parameter :: port = 12345
    integer :: client_socket
    integer :: addr_len, status
    character(len=1024) :: buffer
    type(c_ptr) :: addr

    ! 創建套接字
    client_socket = socket(AF_INET, SOCK_STREAM, 0)
    if (client_socket < 0) then
        print *, "Error creating socket"
        stop
    end if

    ! 設置服務器地址
    addr = c_loc(port)
    status = connect(client_socket, addr, sizeof(port))
    if (status < 0) then
        print *, "Error connecting to server"
        stop
    end if

    print *, "Connected to server"

    ! 發送數據
    buffer = "Hello from client!"
    status = send(client_socket, buffer, sizeof(buffer), 0)
    if (status < 0) then
        print *, "Error sending data"
        stop
    end if

    ! 接收響應
    status = recv(client_socket, buffer, sizeof(buffer), 0)
    if (status < 0) then
        print *, "Error receiving data"
        stop
    end if

    print *, "Received message:", trim(adjustl(buffer))

    ! 關閉套接字
    close(client_socket)

end program client

4. 編譯和運行

首先編譯服務器程序:

gfortran -o server server.f90

然后編譯客戶端程序:

gfortran -o client client.f90

啟動服務器:

./server

在另一個終端中啟動客戶端:

./client

你應該會看到服務器和客戶端之間的通信。

注意事項

  1. 這個示例使用了簡單的TCP套接字編程,適用于基本的通信需求。
  2. 對于更復雜的網絡應用,建議使用更高級的網絡庫,如Boost.Asio(C++)或ZeroMQ。
  3. 確保防火墻允許相應的端口通信。

希望這個示例能幫助你在Ubuntu上進行Fortran網絡編程!

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女