今天有師弟問我計算機專業學計算機網路基礎究竟有什麼作用?一個項目只一門編程語言嗎?作爲回答,我寫下這篇文章。
本文主要是實現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();
}
}
運行結果截圖:
服務端
客戶端