golang通過socket與java通訊

今天有師弟問我計算機專業學計算機網路基礎究竟有什麼作用?一個項目只一門編程語言嗎?作爲回答,我寫下這篇文章。
本文主要是實現echo服務器/客戶端,服務器採用谷歌開源的golang編寫,客戶端採用java編寫(主要是對這兩門語言的編程稍微熟悉點),本文的目的是爲了說明,編程中,網絡基礎是十分重要的,一個項目中,往往不僅僅只用一門編程語言,由於本人也是入門,寫的不好地方,望指正,謝謝。另有有不懂的,可聯繫本人,下面上代碼:

//server.go
//客戶端,主要是在9000端口創建監聽程序,用於接受客戶端連接
package main

import (
    "bufio"
    "fmt"
    "log"
    "net"
    "time"
)

func main() {
    tcpAddr, err := net.ResolveTCPAddr("tcp", "127.0.0.1:9000")
    if err != nil {
        log.Fatalln("地址解析錯誤", err)
    }
    tcpListener, err := net.ListenTCP("tcp", tcpAddr)    //創建監聽
    if err != nil {
        log.Fatalln("地址監聽失敗", err)
    }

    defer tcpListener.Close()

    fmt.Println("開始接受客戶端連接:")
    tcpConn, err := tcpListener.AcceptTCP()    //接受客戶端連接
    if err != nil {
        log.Fatalln("接受客戶端連接失敗", err)
    }
    fmt.Println("客戶端連接成功")
    _, err = tcpConn.Write([]byte("你好,我是服務器,歡迎連接!\n"))    //向客戶端寫數據
    if err != nil {
        log.Fatalln("往客戶端數據失敗", err)
    }
    reader := bufio.NewReader(tcpConn)

    for {
        line, err := reader.ReadString('\n')   //讀取客戶端發來的數據
        if err != nil {
            log.Fatalln("讀取數據失敗", err)
        }
        fmt.Println("客戶端發來數據:", line)

        _, err = tcpConn.Write([]byte("我是服務器,我是服務器,收到請回答,收到請回答\n"))
        if err != nil {
            log.Fatalln("往客戶端發送數據失敗", err)
        }
        time.Sleep(1 * time.Second)    //延時一秒
    }
}
//Client.java
//主要是連接服務端的9000端口,然後讀數據,寫數據
package pri.guanlaolin.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {

    private PrintWriter cout;
    private Socket socket;

    public Client() throws UnknownHostException, IOException,
            InterruptedException {
        // TODO Auto-generated constructor stub

        this.socket = new Socket("127.0.0.1", 9000);   //連接服務器9000端口

        this.cout = new PrintWriter(socket.getOutputStream());
        this.cout.println("你好,我是客戶端!");     //向服務器寫入數據

        BufferedReader br = new BufferedReader(new InputStreamReader(
                socket.getInputStream()));

        String line = "連接服務器成功";
        System.out.println(line);

        while (line != null) {
            line = br.readLine();     //讀取服務器數據
            System.out.println(line);     
            this.cout.println("客戶端收到,客戶端收到");     //向服務器發送數據
            this.cout.flush();
            Thread.sleep(1000);    //延時1秒
        }
        br.close();
        this.cout.close();
        socket.close();
    }

    public static void main(String[] args) throws UnknownHostException,
            IOException, InterruptedException {
        // TODO Auto-generated method stub
        new Client();
    }

}

運行結果截圖:
服務端服務器圖片
客戶端客戶端圖片

發佈了44 篇原創文章 · 獲贊 21 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章