自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

我們一起聊聊網(wǎng)絡(luò)編程

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
把分布在不同地理區(qū)域的計(jì)算機(jī)與專門的外部設(shè)備用通信線路互連成一個(gè)規(guī)模大、功能強(qiáng)的網(wǎng)絡(luò)系統(tǒng),從而使眾多的計(jì)算機(jī)可以方便地互相傳遞信息、共享硬件、軟件、數(shù)據(jù)信息等資源。

引入

【1】網(wǎng)絡(luò)編程:

把分布在不同地理區(qū)域的計(jì)算機(jī)與專門的外部設(shè)備用通信線路互連成一個(gè)規(guī)模大、功能強(qiáng)的網(wǎng)絡(luò)系統(tǒng),從而使眾多的計(jì)算機(jī)可以方便地互相傳遞信息、共享硬件、軟件、數(shù)據(jù)信息等資源。

設(shè)備之間在網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)的傳輸,發(fā)送/接收數(shù)據(jù)。

【2】通信兩個(gè)重要的要素:IP+PORT

【3】設(shè)備之間進(jìn)行傳輸?shù)臅r(shí)候,必須遵照一定的規(guī)則 ---》通信協(xié)議:

【4】TCP協(xié)議:可靠的

建立連接: 三次握手

釋放連接:四次揮手

【5】UDP協(xié)議:不可靠的

基于TCP協(xié)議的網(wǎng)絡(luò)通信-創(chuàng)建客戶端

【1】調(diào)用Dial函數(shù):(net包下)

【2】代碼:

package main

import (
	"fmt"
	//所需的網(wǎng)絡(luò)編程全部都在net包下
	"net"
)

func main()  {
	fmt.Println("客戶端啟動(dòng)...")
	//調(diào)用Dial函數(shù):參數(shù)需要指定tcp協(xié)議,需要指定服務(wù)器端的IP+PORT
	conn,err := net.Dial("tcp","101.201.48.167:80")
	if err != nil {
		fmt.Println("客戶端連接失?。篹rr:",err)
		return
	}
	fmt.Println("連接成功,conn:",conn)
}

基于TCP協(xié)議的網(wǎng)絡(luò)通信-創(chuàng)建服務(wù)器端

【1】進(jìn)行監(jiān)聽(tīng):(Listen函數(shù)在net包下)

【2】代碼:

package main

import (
	"fmt"
	"net"
)

func main()  {
	fmt.Println("服務(wù)端啟動(dòng)了...")
	listen,err := net.Listen("tcp","127.0.0.1:8888")
	if err != nil {
		fmt.Println("監(jiān)聽(tīng)失敗,err:",err)
		return 
	}

	for{
		conn,err2 := listen.Accept()
		if err2 != nil {
			fmt.Println("客戶端的等待失敗,err2:",err2)
		}else {
			fmt.Printf("等待連接成功,con=%v,接收到的客戶端信息:%v \n",conn,conn.RemoteAddr().String())
		}
	}
}

基于TCP協(xié)議的網(wǎng)絡(luò)通信-處理終端數(shù)據(jù)

【1】客戶端發(fā)送數(shù)據(jù):

package main

import (
	"fmt"
	//所需的網(wǎng)絡(luò)編程全部都在net包下
	"net"
	"bufio"
	"os"
)

func main()  {
	fmt.Println("客戶端啟動(dòng)...")
	//調(diào)用Dial函數(shù):參數(shù)需要指定tcp協(xié)議,需要指定服務(wù)器端的IP+PORT
	conn,err := net.Dial("tcp","127.0.0.1:8888")
	if err != nil {
		fmt.Println("客戶端連接失敗:err:",err)
		return
	}
	fmt.Println("連接成功,conn:",conn)

	//通過(guò)客戶端發(fā)送單行數(shù)據(jù),然后退出:
	reader := bufio.NewReader(os.Stdin)
	
	//從終端讀取一行用戶輸入的信息:
	str,err := reader.ReadString('\n')
	if err != nil {
		fmt.Println("終端輸入失敗,err",err)
	}
	
	//將str數(shù)據(jù)發(fā)送給服務(wù)器:
	n,err := conn.Write([]byte(str))
	if err != nil {
		fmt.Println("連接失敗,err:",err)
	}
	fmt.Printf("終端數(shù)據(jù)通過(guò)客戶端發(fā)送成功,一共發(fā)送了%d字節(jié)的數(shù)據(jù),并退出",n)
}

【2】服務(wù)器端接收數(shù)據(jù):

package main

import (
	"fmt"
	"net"
)

func process(conn net.Conn)  {
	//連接用完一定要關(guān)閉:
	defer conn.Close()
	for {
		//創(chuàng)建一個(gè)切片,準(zhǔn)備:將讀取的數(shù)據(jù)放入切片
		buf := make([]byte, 1024)

		//從conn連接中讀取數(shù)據(jù):
		n,err := conn.Read(buf)
		if err != nil {
			return
		}
		//將讀取內(nèi)容在服務(wù)器端輸出:
		fmt.Println(string(buf[0:n]))
	}
}

func main()  {
	fmt.Println("服務(wù)端啟動(dòng)了...")
	listen,err := net.Listen("tcp","127.0.0.1:8888")
	if err != nil {
		fmt.Println("監(jiān)聽(tīng)失敗,err:",err)
		return 
	}

	for{
		conn,err2 := listen.Accept()
		if err2 != nil {
			fmt.Println("客戶端的等待失敗,err2:",err2)
		}else {
			fmt.Printf("等待連接成功,con=%v,接收到的客戶端信息:%v \n",conn,conn.RemoteAddr().String())
		}
		//準(zhǔn)備一個(gè)協(xié)程,協(xié)程處理客戶端服務(wù)請(qǐng)求:
		//不同的客戶端的請(qǐng)求,連接conn不一樣的
		go process(conn)
	}
}
責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2023-07-11 08:34:25

參數(shù)流程類型

2023-07-04 13:36:00

同步工具類Phaser

2021-08-27 07:06:10

IOJava抽象

2024-02-20 21:34:16

循環(huán)GolangGo

2023-08-04 08:20:56

DockerfileDocker工具

2022-05-24 08:21:16

數(shù)據(jù)安全API

2023-09-10 21:42:31

2023-06-30 08:18:51

敏捷開(kāi)發(fā)模式

2024-02-19 10:11:00

Kubernetes網(wǎng)絡(luò)模型

2023-11-29 07:10:50

python協(xié)程異步編程

2022-02-14 07:03:31

網(wǎng)站安全MFA

2022-06-26 09:40:55

Django框架服務(wù)

2022-10-28 07:27:17

Netty異步Future

2023-04-26 07:30:00

promptUI非結(jié)構(gòu)化

2022-04-06 08:23:57

指針函數(shù)代碼

2023-12-28 09:55:08

隊(duì)列數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)

2022-11-12 12:33:38

CSS預(yù)處理器Sass

2024-02-26 00:00:00

Go性能工具

2023-07-27 07:46:51

SAFe團(tuán)隊(duì)測(cè)試

2025-03-27 02:00:00

SPIJava接口
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)