日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

golang 实现 tcp-聊天室

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 golang 实现 tcp-聊天室 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

golang 實現 tcp-聊天室

以下代碼都已傳到github平臺:https://github.com/ElzatAhmed/go-tcp-chatroom

想必做golang網絡開發的同學對gosdk中net/http包十分熟悉,使用net/http可以快速實現http服務器的搭建。但是大家對tcp協議的直接使用可能就沒有那么熟悉了。在接下來的文檔里我將講解如何使用gosdk中的net包實現一個以tcp協議為基礎的簡易的終端群聊聊天室應用。
在dive in之前,需要回顧/介紹以下golang并發編程中的核心概念:

goroutine

在go.dev中是這么介紹goroutine的 A goroutine is a lightweight thread managed by the Go runtime,goroutine是一種被go runtime管理的輕量級線程,其并不會直接對應到重量級的系統線程上,而是被go scheduler調度到少量的系統線程上進行維護。所以在一個go程序中,我們可以同時創造成千上萬個goroutine,將其交給go runtime去進行調度和垃圾回收。

channel

不知道你是否聽說過一種理論叫做CSP,Communicating Sequential Processes,go將其核心思想總結成以下 Do not communicate by sharing memory, share memory by communicating,也就是說不要利用共享內存的方式去交互,利用交互的方式去共享內存(這里的交互這一名詞可能用得不太對,大家可以以communication去理解)。channel正是利用這種思想而定義的。channel可以被理解為支持寫入和讀取的消息管道,其是完全并發安全,channel的每一個元操作都是以單線程的方式進行的,這就代表我們不僅能利用channel進行線程間通信,我們還可以利用它實現鎖。以下是一種利用buffered channel (size大于0的channel) 實現的結構非常簡單的鎖:

package chlock// Chlock is a locker implemented using channel type Chlock struct {ch chan interface{} }// New returns the pointer to a new Chlock struct func New() *Chlock {return &Chlock{ch: make(chan interface{}, 1),} }// Lock writes once to the channel and // blocks all the other goroutines which tries to write func (lock *Chlock) Lock() {lock.ch <- struct{}{} }// Unlock reads from the channel and unblock one goroutine func (lock *Chlock) Unlock() {<-lock.ch }

創建1000個goroutine對同一個全局變量count進行加一操作去測試我們實現的ChLock是否有效:

package mainimport ("fmt""sync""github.com/elzatahmed/channel-lock/chlock" )var count intfunc main() {var wg sync.WaitGroupwg.Add(1000)lock := chlock.New()for i := 0; i < 1000; i++ {go add(lock, &wg)}wg.Wait()fmt.Printf("count = %d\n", count) }func add(lock *chlock.Chlock, wg *sync.WaitGroup) {lock.Lock()defer wg.Done()defer lock.Unlock()count++ }

輸出:

? channel-lock go run main.go count = 1000

介紹完goroutine和channel之后我們就dive in到實現tcp聊天室的過程當中:

tcp聊天室的實現

首先我們開始打造聊天室的模型基礎:

模型

第一個模型即用戶模型,我們簡單的以用戶的名字作為用戶的主鍵,并為其創建兩個channel:

  • receive channel:即獲取消息的channel
  • done channel:發送/獲取斷開連接的channel
  • // user is a single connection to the tcp chat server type user struct {name stringreceive chan messagedone chan interface{} }

    message 是我定義的聊天室消息模型:

    type msgType uint8// message is the model for every message flows through the chatroom type message struct {typ msgType // 利用msgType來區分其應該是系統消息還是用戶消息from stringcontent stringwhen time.Time }const (msgTypeUser msgType = iotamsgTypeSystem )

    接下來建立聊天室模型,可想而知聊天室由多個用戶組成,所以我們需要一個存儲用戶指針的slice,同時利用聊天室名去作為主鍵區分不同的聊天室,為了聊天室強化聊天室的功能在添加一個歷史消息組件,存儲一定數量的歷史消息,在新的用戶進入聊天室后將歷史消息一并發送給用戶:

    // chatroom is the collection of users which they can receive every message from each other type chatroom struct {name stringusers []*usermu sync.Mutex // 在對用戶slice進行操作進行加鎖時使用his *history }

    最后時server模型的創建,一個tcp聊天室中應包含多個群聊聊天室和多個群聊用戶,我們利用map結構的方式去存儲這些數據,同時聊天室需要有一個網絡地址:

    // chatServer is the listening and dispatching server for tcp chatroom, // it stores information about all the rooms and all the users ever created type chatServer struct {addr stringrooms map[string]*chatroomusers map[string]*usermuRoom sync.MutexmuUser sync.Mutex }

    交互過程

    在開始講解交互過程之前,我們首先需要了解net包中的一個interface net.Conn:

    type Conn interface {Read(b []byte) (n int, err error)Write(b []byte) (n int, err error)Close() errorLocalAddr() AddrRemoteAddr() AddrSetDeadline(t time.Time) errorSetReadDeadline(t time.Time) errorSetWriteDeadline(t time.Time) error }

    net.Conn實現了io.Reader和io.Writer接口,也就是說我們可以從Conn中讀取字節,也可以往Conn中寫入字節,更好的是我們可以利用bufio包中的工具去對他進行操作。

    user goroutine

    交互過程的第一步,我們要在user結構體下編寫編寫一個listen的函數,其主要作用就是讀取receive channel中的內容并編寫到net.Conn中,在這我利用到了go經典的select case語句模型,也就是說當我從done channel中讀取到任何一種內容時我就要停止讀取:

    // listen starts a loop to receive from the receive channel and writes to the net.Conn func (u *user) listen(conn net.Conn) {for {select {case msg := <-u.receive:_, _ = conn.Write(msg.bytes()) // msg.bytes()是我在message結構體下定義的將message打包成字符串// 并轉化成字節數組返回的函數case <-u.done:break}} }

    這里我為了簡便忽視了conn.Write返回的錯誤(這是一個不好的習慣,建議大家在編寫時處理該錯誤)。我們將在后續的server啟動函數中將該函數對待成goroutine來啟動它。

    chatroom 廣播

    我們在定義user結構體下的listen函數時從receive channel中讀取了message,那么我們需要一個goroutine往該channel中寫入內容。chatroom下的broadcast(廣播)函數,接受一個message并將其廣播發送給聊天室中的每一個用戶:

    // broadcast sends the message to every user in the chatroom except the sender func (room *chatroom) broadcast(msg message) {for _, u := range room.users {if u.name == msg.from {continue}// 這里啟動的goroutine是為了定義寫入的超時時間(因為寫入可能會block)// 如果不需要也可以拋棄這里的goroutine,直接進行寫入go func(u *user) {select {case u.receive <- msg:breakcase <-time.After(3 * time.Second):break}}(u)} }

    該函數將在下一部分chatroom goroutine內容中定義的函數中利用

    chatroom goroutine

    每一個聊天室對每一個用戶連接都需要保持一個tcp連接,即tcp連接的數量 = 聊天室1 * 聊天室1用戶數量 + 聊天室2 * 聊天室2用戶數量 + ···
    每一個tcp連接利用下面定義的chatroom結構體下的newUser函數來維持:

    // newUser adds the user to the chatroom and starts a loop for reading from the net.Conn func (room *chatroom) newUser(user *user, conn net.Conn) {room.mu.Lock()room.users = append(room.users, user)room.mu.Unlock()room.broadcast(newSystemMsg(contentHello(user.name)))room.writeHistory(conn)for {reader := bufio.NewReader(conn)bytes, err := reader.ReadBytes('\n')if err != nil {continue}content := strings.Trim(string(bytes), "\n")log.Printf("%s -> %s: %s\n", user.name, room.name, content)// if content equals to "exit" then close the connectionif content == contentExit {user.done <- struct{}{}room.broadcast(newSystemMsg(contentGoodbye(user.name)))_ = conn.Close()break}msg := newUserMsg(user.name, content)room.his.push(msg)room.broadcast(msg)} }

    上述函數的主體內容和步驟可以總結為以下內容:

  • 加鎖添加新用戶
  • 廣播新用戶加入消息
  • 為該用戶寫入歷史消息
  • 從net.Conn中讀取一行內容(該聊天室只能一行一行地發送消息)
  • 若內容等于exit,在該用戶的done channel中發送消息,并廣播退出聊天室的消息并關閉連接,結束,否則跳到6
  • 處理內容并打包成message結構
  • 將消息推入歷史消息
  • 在聊天室中廣播該消息
  • 回到4
  • server的建立

    有c++、java或python tcp編程的經驗的同學都知道,tcp連接是由socket實現的,socket分為兩種(監聽socket和通信socket),每個socket又是四元組(兩組ip和端口號)。golang中并沒有socket的概念,golang中的兩種socket就是net包中的net.Listener和net.Conn接口,net.Listner對應監聽socket,net.Conn對應通信socket。net.Listener的建立我們只需要利用net包中的net.Listen函數并傳入協議名稱(這里是tcp)和服務器地址即可。在利用net.Listenet的Listen方法連接新的用戶創建通信socket(net.Conn),而這里的通信socket正式貫通了整個tcp聊天室的tcp連接體。

    // Spin starts the chatServer at given address func (server *chatServer) Spin() {listener, err := net.Listen("tcp", server.addr)if err != nil {log.Fatalf("failed to start the server at %s, err: %s\n", server.addr, err.Error())}log.Printf("server started at address %s...\n", server.addr)for {// 開啟循環接受新的連接conn, err := listener.Accept()log.Printf("server accepted a new connection from %s\n", conn.RemoteAddr())if err != nil {continue}// 將獲取的conn對象傳給spin方法(注意不是Spin方法),開啟新的goroutinego server.spin(conn)} }

    連接建立以后,我們需要提前定一個簡單的協議讓用戶決定自己的用戶名和想要加入的聊天室名稱。這里我們就定一行字符串username;chatroomName利用分號分割用戶名和聊天室名稱。在服務器接收到連接以后的第一步就是要讀取用戶發來的協議請求,解析創建并將用戶分配到對應的聊天室中,其次在啟動新的chatroom goroutine和user goroutine即可:

    // spin do the protocol procedure and starts the connection goroutines func (server *chatServer) spin(conn net.Conn) {reader := bufio.NewReader(conn)bytes, err := reader.ReadBytes('\n')if err != nil {log.Printf("connection failed with client %s with err: %s\n",conn.RemoteAddr(), err.Error())return}username, roomname, err := parseProtocol(bytes)if err != nil {_, _ = conn.Write(comm.BytesProtocolErr)return}if _, ok := server.users[username]; ok {_, _ = conn.Write(comm.BytesUsernameExists)_ = conn.Close()log.Printf("connection from %s closed by server\n", conn.RemoteAddr())return}log.Printf("connecting user %s to chatroom %s...\n", username, roomname)u := server.newUser(username)room, ok := server.rooms[roomname]if !ok {room = server.newRoom(roomname)}go room.newUser(u, conn)go u.listen(conn)log.Printf("user %s is connected to chatroom %s\n", username, roomname) }

    以上函數的內容和步驟可以總結為以下:

  • 從net.Conn中讀取一行內容(即協議內容)
  • 解析協議,若協議錯誤,發送錯誤內容并返回
  • 在server的usersmap中尋找用戶名,若用戶名已存在,發送用戶存在錯誤,并返回
  • 創建新的用戶
  • 若聊天室不存在,創建新的聊天室
  • 啟動chatroom goroutine
  • 啟動user goroutine
  • 到此服務器內容全部結束,現在我們就開始測試我們的服務器,首先建立main函數:

    func main() {// 利用flag獲取命令行輸入參數host := flag.String("h", "127.0.0.1", "the host name of the server")port := flag.Int("p", 8888, "the port number of the server")flag.Parse()chatServer := server.New(*host, *port)chatServer.Spin() }

    在終端中啟動服務器:

    ? go-tcp-chatroom go run server.go -h 127.0.0.1 -p 8888 2022/07/03 22:47:53 server started at address 127.0.0.1:8888...

    我們利用linux工具nc(netcat)進行對服務器的tcp連接發送內容:

    ? go-tcp-chatroom nc 127.0.0.1 8888 xiaoming;room1 2022-07-03 22:49:02 server: user xiaoming entered the chatroom and says hello! hello everyone! my name is xiaoming! 2022-07-03 22:49:31 server: user xiaohong entered the chatroom and says hello! 2022-07-03 22:49:37 xiaohong: hello xiaoming! 2022-07-03 22:49:42 xiaohong: my name is xiaohong! ? go-tcp-chatroom nc 127.0.0.1 8888 xiaohong;room1 2022-07-03 22:49:10 xiaoming: hello everyone! 2022-07-03 22:49:18 xiaoming: my name is xiaoming! 2022-07-03 22:49:31 server: user xiaohong entered the chatroom and says hello! hello xiaoming! my name is xiaohong! ? go-tcp-chatroom go run server.go -h 127.0.0.1 -p 8888 2022/07/03 22:47:53 server started at address 127.0.0.1:8888... 2022/07/03 22:48:52 server accepted a new connection from 127.0.0.1:65236 2022/07/03 22:49:02 connecting user xiaoming to chatroom room1... 2022/07/03 22:49:02 user xiaoming is connected to chatroom room1 2022/07/03 22:49:10 xiaoming -> room1: hello everyone! 2022/07/03 22:49:18 xiaoming -> room1: my name is xiaoming! 2022/07/03 22:49:26 server accepted a new connection from 127.0.0.1:65330 2022/07/03 22:49:31 connecting user xiaohong to chatroom room1... 2022/07/03 22:49:31 user xiaohong is connected to chatroom room1 2022/07/03 22:49:37 xiaohong -> room1: hello xiaoming! 2022/07/03 22:49:42 xiaohong -> room1: my name is xiaohong!

    PS: 源代碼中實現client端,大家可以在源代碼中查看client端實現邏輯,歡迎大家在github上關注我,如果上述中有表達錯誤也希望大家能提出來!

    總結

    以上是生活随笔為你收集整理的golang 实现 tcp-聊天室的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    国产福利a | 国产高清一区二区 | 国产成人精品日本亚洲999 | 国产成人精品一区二区三区免费 | 国产精品久久人 | 在线国产黄色 | 国产精品一区二区在线播放 | 九九免费在线观看 | 成人免费xyz网站 | 干av在线 | 手机在线观看国产精品 | 亚洲精品电影在线 | www.黄色小说.com| 亚洲视频在线免费观看 | 国产理论片在线观看 | 午夜视频欧美 | 久久婷婷国产色一区二区三区 | 国产在线a| 国产精品女教师 | 在线观看一级视频 | 国产黄免费在线观看 | 91色影院 | 免费视频91| 国产高清永久免费 | 国产精品日韩欧美一区二区 | 黄色片网站大全 | 国产一区在线视频播放 | 999电影免费在线观看 | 国产乱对白刺激视频在线观看女王 | 国内精品久久久久 | 99久久毛片 | 成av在线| av免费在线网 | 久久久久久久久久网站 | 久久欧美在线电影 | 在线 你懂 | 国产网红在线观看 | av中文字幕网站 | 日韩中文字幕免费在线观看 | 欧美另类sm图片 | 中文字幕中文字幕在线中文字幕三区 | 久久欧美视频 | 国产精品a久久久久 | 激情欧美在线观看 | 久久精品综合 | 亚洲资源网 | 99热手机在线观看 | 日韩特级毛片 | 亚洲欧洲精品视频 | 欧美大码xxxx | 91日韩免费 | 五月婷婷色 | 欧美日本不卡视频 | 免费看片网址 | 久久夜夜夜| 国产麻豆电影 | 9色在线视频 | 久久99精品久久久久蜜臀 | 激情影音 | 国产精品久久久久久久久久久久午夜 | 9色在线视频 | 国产夫妻av在线 | 日韩资源在线观看 | 中文字幕欲求不满 | 亚洲视频一区二区三区在线观看 | 99精品欧美一区二区三区 | 久久精品99国产精品酒店日本 | 黄色亚洲精品 | 精品视频久久久久久 | 午夜性盈盈 | 日韩成人高清在线 | 中文在线免费看视频 | 人人澡人人爱 | 中文字幕在线观看资源 | 97在线视频网站 | 亚洲精品999 | 91av在线播放| 免费看一及片 | 精品久久免费看 | 亚洲蜜桃在线 | 欧美91视频 | 久久99精品国产一区二区三区 | 视频在线一区二区三区 | 最新日韩电影 | 久久久久网站 | 国产美女久久 | 蜜桃传媒一区二区 | 婷婷激情欧美 | 欧美性网站| 91成人精品国产刺激国语对白 | 久久精品91久久久久久再现 | 亚洲自拍自偷 | 成人精品视频 | 在线v片免费观看视频 | 91九色视频国产 | 国产玖玖精品视频 | 国产黄色高清 | 丁香花在线观看免费完整版视频 | 波多野结衣综合网 | 手机成人在线 | 最新日韩视频 | 久久久久久免费视频 | 久久综合色8888 | 亚洲精品理论片 | 97综合视频 | 欧美日韩一区二区三区不卡 | 婷婷激情5月天 | 国产一区国产二区在线观看 | 青青河边草免费观看 | 狠狠狠狠狠狠狠干 | 国产精品免费小视频 | japanese黑人亚洲人4k | 日韩av成人在线 | 中文字幕有码在线播放 | 深爱婷婷 | 狠狠干狠狠插 | 在线综合 亚洲 欧美在线视频 | 欧洲一区二区三区精品 | 国产精品第一页在线 | 丁香五婷 | 久草精品视频 | 一级久久久 | 免费在线一区二区 | 国产九色在线播放九色 | 人人操日日干 | 成人av网站在线播放 | 五月激情天 | 91麻豆精品| 欧美片网站yy | 夜夜操狠狠操 | 91高清不卡 | 欧美日韩在线视频一区 | 香蕉视频18 | 久久久久久久久久国产精品 | 麻豆免费视频观看 | av综合av | av在线网站大全 | 久久国语 | 精品av在线播放 | 在线亚洲播放 | 一区二区三区在线不卡 | 亚洲伦理一区二区 | 狠狠激情中文字幕 | 日韩h在线观看 | 黄色片免费在线 | 亚洲高清av在线 | 亚洲亚洲精品在线观看 | 午夜视频在线观看网站 | 99热这里只有精品国产首页 | 成人黄色大片网站 | 久草免费看 | 91av原创 | 深爱激情av | 亚洲区精品 | 九九色网 | 国产精品毛片网 | 日本h视频在线观看 | 色综合久久88色综合天天人守婷 | 中文字幕成人一区 | 欧美性生交大片免网 | 日韩精品短视频 | 天天插天天色 | 黄色毛片视频免费观看中文 | 免费看v片 | 亚洲a成人v| 免费视频一区二区 | 午夜视频一区二区三区 | 狠狠躁天天躁 | 久久96国产精品久久99漫画 | 黄色av三级在线 | 久久三级视频 | 精品久久电影 | 国产精品欧美久久久久久 | 精品久久久久久久久久 | 天天色棕合合合合合合 | 欧美日韩国产网站 | 国产精品久免费的黄网站 | 久久成人国产精品入口 | 伊香蕉大综综综合久久啪 | 免费网站在线 | 久久精品这里精品 | 国产高清视频免费在线观看 | 成人免费观看视频大全 | 亚洲国产一区av | 啪啪免费视频网站 | 国产成人精品久久 | 黄色一二级片 | 在线电影a | 国产成人一二片 | 久久免费黄色 | 日韩欧美在线观看一区 | 国产日韩欧美在线 | 日韩电影精品一区 | 在线观看成人福利 | 国产一级性生活视频 | 免费一级片视频 | 91精品成人久久 | 97精品欧美91久久久久久 | 久久久精品网站 | 日韩黄色中文字幕 | 9久久精品 | 国产第一二区 | 人人爽人人看 | 成人黄大片视频在线观看 | 99免费在线观看视频 | 九色视频网 | 国产一级在线观看视频 | 欧美一级片在线 | 久久久久久久久国产 | 麻豆视传媒官网免费观看 | 欧美日韩中文字幕在线视频 | 97超碰总站| 日韩在线免费小视频 | 日韩一区精品 | 欧美肥妇free | 欧美日韩高清一区二区 国产亚洲免费看 | 337p西西人体大胆瓣开下部 | 国产精品九九视频 | 在线观看国产永久免费视频 | 成年人免费在线观看网站 | 911久久香蕉国产线看观看 | 中文字幕免费高清在线观看 | 国产精品久久久电影 | 最近高清中文在线字幕在线观看 | 波多野结衣小视频 | av片一区| 中文字幕人成一区 | 精品在线播放 | 成人h视频在线播放 | 男女免费视频观看 | 国产一级二级三级视频 | 欧美日韩国产区 | 国产亚洲精品久久久久久网站 | 久久午夜免费视频 | 97超碰在线久草超碰在线观看 | 亚洲性xxxx| 精品国产电影 | 免费观看日韩 | 亚洲天堂精品 | 久久免费电影网 | 久久精品久久久久电影 | 91人人揉日日捏人人看 | 久久九九国产精品 | 亚洲免费av电影 | 男女免费视频观看 | 亚洲视频 视频在线 | 人人爽久久涩噜噜噜网站 | 久久er99热精品一区二区 | 99re6热在线精品视频 | 国产 亚洲 欧美 在线 | 99热超碰 | 日本少妇视频 | 久久少妇免费视频 | 中文字幕亚洲在线观看 | 日韩视频在线一区 | 在线看的av网站 | 日韩理论片在线 | 西西444www大胆无视频 | 91av国产视频 | 少妇bbbb| 国产精品久久久久久超碰 | 国产精品99久久久久久人免费 | 在线观看的av网站 | 超级碰99 | 日韩欧美在线不卡 | 久久综合加勒比 | 在线观看国产 | 91色九色 | 在线观看中文字幕dvd播放 | 狠狠色噜噜狠狠狠狠 | 国产精品毛片久久蜜 | 亚洲一区二区三区精品在线观看 | 国产成人精品一区一区一区 | 亚洲精品99久久久久中文字幕 | 国产精品成久久久久三级 | 国产精品久久久久一区二区三区共 | 成人免费网站在线观看 | 国产视频久久久 | 日韩国产精品久久久久久亚洲 | av中文字幕在线看 | 人人干人人干人人干 | 在线观影网站 | 成人av亚洲| 麻豆你懂的 | 久久五月精品 | 黄www在线观看 | 国产原创91 | 日韩欧美在线国产 | 久久高清免费视频 | 99精品免费久久久久久日本 | 婷婷精品在线视频 | 久久免费av电影 | 久久精品一 | 欧美日韩裸体免费视频 | 激情校园亚洲 | 亚洲视频在线观看免费 | 亚洲女裸体 | 男女靠逼app | 免费在线激情电影 | 岛国av在线免费 | 91免费国产在线观看 | 亚洲人成在 | 免费进去里的视频 | 亚洲成av人片在线观看 | av黄色免费网站 | 欧美一级片免费播放 | 国产精品v a免费视频 | 五月婷婷黄色网 | 精品国产人成亚洲区 | 丁香激情综合 | 国产日韩在线播放 | 91av免费在线观看 | 国产高清免费视频 | 国产在线a| 免费看污黄网站 | 国产在线不卡一区 | 综合久久影院 | 91免费视频黄 | 欧美性成人 | 特级xxxxx欧美 | 日韩高清不卡一区二区三区 | 欧美性精品 | 久久中文字幕导航 | 欧美色图30p | 日本论理电影 | 91男人影院| 国产成人精品午夜在线播放 | 一区二区精品久久 | 成年人视频在线免费 | 一区精品久久 | 午夜精品久久久久久久久久久久久久 | 天天摸夜夜添 | 美女久久视频 | 成人av免费在线观看 | 最新动作电影 | 在线视频观看亚洲 | 欧美巨乳波霸 | 亚洲精品456在线播放 | 久久国产高清 | 欧美久久久一区二区三区 | 欧美成人日韩 | 久久久久久久久久久久亚洲 | 婷婷射五月 | 日韩激情网 | 五月婷婷在线视频观看 | av在线电影免费观看 | 91精品国产综合久久福利不卡 | 欧美一级艳片视频免费观看 | 国产九九热视频 | 久久久国产日韩 | 在线观看免费高清视频大全追剧 | 欧美久久久久久久 | 九九视频网 | 国产99久久久国产精品免费看 | 久久av免费 | www欧美xxxx| 久久91久久久久麻豆精品 | 成人av网站在线 | 国产一区二区久久久久 | 一区二区视频电影在线观看 | 亚洲1级片| 精品毛片久久久久久 | 91精品国产一区二区在线观看 | 国产精品美 | 久久在草 | 黄色小说视频网站 | 免费久久网站 | 久99久精品 | 少妇高潮流白浆在线观看 | 91在线看黄 | 久草在线视频免赞 | 精品久久久久久国产偷窥 | av免费观看网站 | 国产黄色播放 | 国产精品一区二区三区四 | 久久精品成人 | 91传媒激情理伦片 | 99国产视频| 欧美精品在线视频观看 | 午夜三级在线 | 91网站在线视频 | 狠狠色丁香婷婷综合橹88 | 99精品视频观看 | 欧美日韩视频在线观看一区二区 | 激情视频综合网 | 免费日韩一区二区三区 | 国产伦精品一区二区三区无广告 | 91伊人影院 | 美女视频网站久久 | 亚洲成人av片在线观看 | 又黄又爽又湿又无遮挡的在线视频 | 蜜桃视频在线视频 | 毛片网在线 | 五月天亚洲综合小说网 | 久久久久久久久久久免费av | 亚洲黄色一级大片 | 欧美a影视| 欧美日韩视频在线一区 | 国产一区二区精品久久 | 亚洲三级黄色 | www久久99 | 你操综合 | 日韩av一区二区在线影视 | 九九精品无码 | 一区二区三区在线免费 | 国产成人亚洲精品自产在线 | 日日天天av | 久久精品五月 | 日韩精品视频免费在线观看 | 天天草天天插 | 久草在线费播放视频 | 午夜黄色| 欧美日韩在线观看一区二区三区 | a视频在线 | 亚洲黄色一级电影 | 亚洲,播放 | 国产很黄很色的视频 | a成人v在线 | 亚洲人成人在线 | 欧美一二三视频 | 国产又粗又长的视频 | 一区二区三区免费 | 狠狠色丁香久久婷婷综 | 国产精品毛片一区视频 | 视频99爱| 6080yy午夜一二三区久久 | 久久爱992xxoo | 黄色免费av| 国产一区二区手机在线观看 | 一区二区三区四区五区六区 | 亚洲涩涩涩 | 色五婷婷| 99精品在这里 | 婷婷久久精品 | 国产区免费在线 | 久久人人看 | 久久er99热精品一区二区 | 国产精品高清在线 | 免费91麻豆精品国产自产在线观看 | 激情伊人五月天久久综合 | 99精品视频免费在线观看 | 免费视频国产 | 国产精品理论视频 | 国产精品永久在线 | 色偷偷男人的天堂av | 中文字幕电影高清在线观看 | 久久免费av| 97精品国产一二三产区 | 免费a级黄色毛片 | 果冻av在线 | free. 性欧美.com| 97超碰人人模人人人爽人人爱 | 精品视频免费久久久看 | 亚洲 欧美 日韩 综合 | 国产精品麻豆视频 | 日韩一区二区三区免费电影 | 五月婷婷丁香网 | 在线视频观看成人 | 色网免费观看 | 超碰99人人 | 日日爽日日操 | 97精品在线观看 | 国产打女人屁股调教97 | 日韩一级电影在线 | 97在线观看 | www.香蕉视频在线观看 | 中文字幕成人在线 | 国产日本亚洲 | 亚洲精选99| 国产精品原创在线 | 日韩欧美一区二区在线 | 亚洲成人黄 | 国产美女被啪进深处喷白浆视频 | 精品国产乱码久久久久 | 精品成人网 | 免费久久99精品国产婷婷六月 | 色综合天天 | 在线观看色网 | 久久精品综合一区 | 色丁香久久 | 欧美日韩亚洲在线观看 | 免费在线观看视频a | 婷婷开心久久网 | av电影在线观看完整版一区二区 | 中文字幕 国产专区 | 国产特黄色片 | 99热这里只有精品1 av中文字幕日韩 | 黄色精品国产 | 国产精品免费av | 在线观看亚洲 | 正在播放日韩 | 成人国产亚洲 | 成人国产网站 | 超级碰碰视频 | 亚洲女同ⅹxx女同tv | 波多野结衣电影一区 | 91视频 - x99av | 国产亚洲综合在线 | 久久久亚洲麻豆日韩精品一区三区 | 91看片在线 | 激情五月视频 | 亚洲成人免费 | 国产精品麻豆三级一区视频 | 色www精品视频在线观看 | 一区二区三区高清在线观看 | 国产伦理一区 | 欧美久草网 | 国产精品va在线 | 粉嫩高清一区二区三区 | 色综合天天狠狠 | 超碰国产人人 | 欧美成人久久 | 天天综合天天做 | 天天色视频 | 国产精品视频永久免费播放 | 最近免费中文字幕大全高清10 | av大片网站 | 亚洲美女精品 | 中文区中文字幕免费看 | 成人av影视 | 色婷婷狠狠干 | www久久| 综合网天天| 成人av电影免费观看 | 婷婷六月丁 | 国产一区在线不卡 | 麻豆精品视频在线观看免费 | 一级片免费在线 | 狠狠色丁香婷婷综合久小说久 | 日韩理论在线观看 | 成人免费观看大片 | 青青射| 蜜臀久久99精品久久久无需会员 | 日韩精品免费一区 | 天天综合五月天 | 99久久久久国产精品免费 | 欧美九九视频 | 久久久久久久久久久网站 | 99久久久国产精品 | 欧美男男激情videos | av7777777 | 国产91学生粉嫩喷水 | 99九九热只有国产精品 | 久久综合五月天婷婷伊人 | 高清国产午夜精品久久久久久 | 日韩精品高清视频 | www.福利 | www.eeuss影院av撸| 超碰av在线 | 麻豆视频在线观看免费 | 欧洲精品一区二区 | 最近中文字幕完整视频高清1 | 亚洲精品色婷婷 | 午夜精品999| 免费特级黄毛片 | 亚洲视频第一页 | 中文字幕在线观看完整版电影 | 五月婷婷毛片 | 国产亚洲精品久久久久久无几年桃 | 免费特级黄毛片 | 欧美黄网站| 国产看片网站 | 欧美精品久久久久久久亚洲调教 | 国产精品久久一区二区无卡 | 成人一区二区三区在线观看 | 九九涩涩av台湾日本热热 | 亚洲精色 | 波多野结衣最新 | 亚洲综合精品在线 | 天天色天天爱天天射综合 | 国产精品久久久久久久久久久久午夜片 | 美女网站视频免费黄 | 色婷婷激情| 最新日韩视频在线观看 | 一区二区三区www | 免费看一及片 | av高清免费| 精品久久久免费视频 | 国产成人精品综合久久久 | 一级理论片在线观看 | 欧美成人黄色片 | 最近中文字幕完整视频高清1 | 五月天久久婷 | 中文字幕一区二区三区乱码在线 | av不卡网站 | 麻豆综合网 | 99精品在线播放 | 一区二区在线影院 | 丁香资源影视免费观看 | 国产精品毛片久久久久久 | 欧美精品国产综合久久 | 国产成人61精品免费看片 | 国产综合婷婷 | 右手影院亚洲欧美 | 日三级在线 | 高清久久久 | 天天射综合网视频 | 国产在线超碰 | 国产精品丝袜 | 91污污视频在线观看 | 亚洲国产午夜视频 | 天天综合成人网 | 亚洲天堂网在线播放 | 久草精品视频 | 国产成人免费在线观看 | 亚洲精品久久久久久中文传媒 | 国产成人在线观看免费 | 美女免费视频一区二区 | 国内偷拍精品视频 | 亚洲情婷婷| 亚洲干视频在线观看 | 日本大片免费观看在线 | 日韩精品一区二区不卡 | 久久神马影院 | 久久国产精品一区二区三区 | 午夜精品区 | 久久国产电影 | 91在线观看视频网站 | 婷婷开心久久网 | 久久久久久久久久久成人 | 四虎国产精品免费观看视频优播 | 奇米影视999 | 国产清纯在线 | 四虎成人精品在永久免费 | 免费看黄网站在线 | 99久久超碰中文字幕伊人 | 黄色软件在线观看免费 | 日韩欧美xxxx | 可以免费观看的av片 | 婷婷久月 | 欧美一级乱黄 | 免费高清av在线看 | 国产精品久久久一区二区三区网站 | 日韩免费小视频 | 美女免费视频观看网站 | 日韩理论在线播放 | 国产精品乱码一区二区视频 | 成人免费视频在线观看 | 伊人婷婷激情 | 日本黄色a级大片 | 国产精品18久久久 | 丁香资源影视免费观看 | 亚洲精品在线网站 | www.天天射.com| 国产一区欧美日韩 | 天天天天射| 日本中文字幕电影在线免费观看 | 天天干,夜夜操 | 天天干天天玩天天操 | 96在线| 国产精品久久久久一区二区国产 | 日本女人的性生活视频 | av成人免费 | 中文视频在线看 | 美女免费视频一区 | 亚洲一区精品二人人爽久久 | 欧洲亚洲精品 | 色爽网站 | 香蕉视频国产在线观看 | 国产成人精品不卡 | 中文字幕在线视频一区二区三区 | 91久久国产精品 | 天天躁天天躁天天躁婷 | 天天艹天天操 | 在线v | 国产精品免费不 | 久久久久久电影 | 精品久久久网 | 国产精品中文久久久久久久 | 欧美一区二视频在线免费观看 | 欧美日韩国产一二三区 | 99精品视频在线免费观看 | 成人一区二区三区在线 | 国产xxxx性hd极品 | 久久免费国产精品1 | 中文字幕国内精品 | 香蕉视频在线播放 | av成年人电影 | 91在线播放国产 | 国产精品不卡在线播放 | 久久久久在线视频 | 天堂av高清| 最近高清中文在线字幕在线观看 | 日韩福利在线观看 | 欧美日韩中文国产一区发布 | 九九热av| 99热日本 | 久久综合中文色婷婷 | 欧美激情综合五月色丁香 | 人人看97 | 国产专区精品 | 日韩系列在线观看 | 久久久 激情 | 亚洲精品国产欧美在线观看 | 精品国产123 | 国产成人精品日本亚洲999 | 亚洲精品99久久久久久 | 九九久久影视 | 亚洲91精品在线观看 | 成人黄色小视频 | 亚洲国产天堂av | 欧美做受高潮 | 国际精品久久久久 | 国产精品成人一区二区 | 伊人久操 | 国产精品久久久久一区二区 | 国产免费小视频 | 午夜精品成人一区二区三区 | 91精品国产九九九久久久亚洲 | 美女免费黄网站 | 国产免费又黄又爽 | 亚洲精品66 | 丁香婷婷电影 | 色综合久久五月天 | 国产va饥渴难耐女保洁员在线观看 | 国产亚洲精品久久久久久久久久久久 | 免费观看mv大片高清 | 美女黄频在线观看 | 99热.com| 在线观看午夜 | 成年人免费在线观看网站 | 日韩久久久久久久久 | 久草爱| 国产在线观看黄 | 国产高清99 | 久久久久亚洲天堂 | 亚州国产精品视频 | 夜色资源站wwwcom | 91精品视频免费 | 99国产视频| 在线国产日本 | 久国产在线播放 | 久久免费精品 | 精品久久久久久一区二区里番 | 欧美特一级片 | 日韩黄色免费在线观看 | 日韩在线高清视频 | 97超碰中文字幕 | 东方av在 | 在线观看黄色的网站 | 国产精品视频永久免费播放 | 国产又黄又爽无遮挡 | www五月天com | 99精品偷拍视频一区二区三区 | 中文字幕在线观看视频网站 | 2023年中文无字幕文字 | 久久成人18免费网站 | 国产精品乱码久久久久久1区2区 | 日韩免费成人 | 最新国产视频 | 成人午夜在线观看 | 免费激情在线电影 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 国产精品视频全国免费观看 | 亚洲精品99久久久久久 | 国内精品久久久久久久久久久 | 成人午夜毛片 | av在线播放快速免费阴 | 视频在线观看一区 | 日韩激情久久 | 日韩欧美一区二区三区视频 | 国产精品久久久久永久免费观看 | 久久不射网站 | 久久免费精品一区二区三区 | 成人97人人超碰人人99 | 色综合 久久精品 | 久久久久国产一区二区三区四区 | 成人精品视频久久久久 | 99久久久国产精品免费99 | 久久精品com| 国产精品6999成人免费视频 | 国产精品岛国久久久久久久久红粉 | 欧美成人aa| 97国产在线播放 | 亚洲九九爱 | 欧洲精品一区二区 | 日韩二区在线 | 五月婷久 | 日日操天天爽 | 91爱爱视频 | 国产色视频网站2 | 中文字幕中文中文字幕 | 国产无套精品久久久久久 | 成人影视免费看 | 国产精品午夜免费福利视频 | 欧美日韩大片在线观看 | 日韩欧美69 | 天天干天天碰 | 精品国产一区二区三区日日嗨 | 精品伊人久久久 | 午夜美女福利 | 国产精品第一 | 欧美久久成人 | 激情欧美一区二区三区免费看 | 久久久精品久久日韩一区综合 | 狠狠的干 | 国产色婷婷精品综合在线手机播放 | 久久一线 | 亚洲精品小区久久久久久 | 人人爽人人爽人人片av免 | 国产精品久久久久久久久久ktv | www色网站| 国产粉嫩在线 | 亚洲精品午夜国产va久久成人 | 天天操婷婷 | 人人爽网站 | 午夜色性片 | 亚洲一区尤物 | 久久你懂得 | 国产免费小视频 | 人人澡超碰碰97碰碰碰软件 | 超碰97成人 | 亚洲四虎在线 | 粉嫩av一区二区三区免费 | 视频成人永久免费视频 | 欧美激情视频一二三区 | 五月天久久激情 | 久久视频在线免费观看 | 亚洲精品视频免费看 | 91色网址 | 久久久精品亚洲 | 狠狠久久婷婷 | 日本精品久久久久中文字幕 | 天天干天天干天天干天天干天天干天天干 | 在线播放视频一区 | 天天操夜夜看 | 九九九国产 | 国产精品com | 国产高清视频在线播放一区 | 久久久精品在线观看 | 日韩精品免费一区 | 天天伊人狠狠 | 狠狠干.com| 99精品视频播放 | 97麻豆视频 | 国产精品久久久久999 | 在线免费观看黄色小说 | www.狠狠操.com | 国产精品久久久久久久久久了 | 中文字幕人成一区 | 日韩mv欧美mv国产精品 | 视频国产在线 | 国产精品久久99综合免费观看尤物 | 中文字幕在线观看完整版 | 毛片一级免费一级 | 人人插人人草 | 久久一二三四 | 亚洲干| 丁香六月在线观看 | 缴情综合网五月天 | 日韩激情片在线观看 | 青青河边草免费直播 | 国内精品久久久久影院日本资源 | 91探花在线视频 | 成人免费亚洲 | 欧美一二三视频 | 在线免费观看亚洲视频 | 66av99精品福利视频在线 | 性色av一区二区三区在线观看 | 欧美成人黄色片 | 婷婷丁香激情 | 九九九九九精品 | 日韩大片免费观看 | 国产一级高清视频 | 亚洲日本色 | 成人精品一区二区三区电影免费 | 美女网站在线免费观看 | av一级在线 | 婷婷视频 | 国产精品麻 | 中文字幕高清免费日韩视频在线 | 毛片.com| 色av网站| 精品国产乱码久久久久久1区2匹 | 国产98色在线 | 日韩 | 中文字幕日韩在线播放 | 国产性xxxx| 91精品蜜桃 | 91自拍成人 | 精品国内自产拍在线观看视频 | 亚洲成人高清在线 | 91黄色免费网站 | 亚洲精品乱码久久久久久按摩 | 一区二区三区精品久久久 | 中文字幕欧美日韩va免费视频 | 亚洲日韩欧美一区二区在线 | 中文字幕在线观看一区 | 欧美午夜性生活 | 中文在线√天堂 | 日韩黄色中文字幕 | 毛片99| 国产精品成人国产乱 | 国内精品久久久久久中文字幕 | 久久高清av | 最近日本韩国中文字幕 | 国产一区观看 | 国产麻豆果冻传媒在线观看 | av日韩国产 | 日韩一区二区三区高清免费看看 | 欧美日韩精品影院 | 高清精品视频 | 日本h在线播放 | 久久精品国产一区二区三 | 一区二区三区国产欧美 | 久久久国产精华液 | 国产午夜精品一区 | 香蕉影视 | 九九久久久 | 少妇精品久久久一区二区免费 | 国产伦理剧 | 欧美精品久久久久久久久老牛影院 | 91精品国产麻豆国产自产影视 | 国产精品人人做人人爽人人添 | 激情av五月婷婷 | 色婷婷av国产精品 | 色婷婷视频在线观看 | 日韩精品一二三 | 国产一区二区在线免费 | 91亚洲精品久久久久图片蜜桃 | 激情视频一区二区三区 | 麻豆国产精品永久免费视频 | 欧美一级电影在线观看 | 在线观看中文av | 久久成人在线视频 | 日韩在线 一区二区 | 久久九九久久 | 亚洲精品午夜一区人人爽 | 超碰97.com | 91亚洲国产成人久久精品网站 | 992tv人人网tv亚洲精品 | 99久久夜色精品国产亚洲96 | 综合色婷婷 | 午夜成人影视 | 综合激情伊人 | 精品在线你懂的 | 黄网站污 | 亚洲精品久久久久久中文传媒 | 国产免费观看久久黄 | 欧美91成人网 | 91大神电影| 在线电影日韩 | 97免费公开视频 | 日韩网站在线观看 | 日韩免费在线一区 | 久久久久久免费毛片精品 | 中文字幕av一区二区三区四区 | 日韩欧美国产免费播放 | 91高清视频免费 | 69精品人人人人 | 中文字幕 欧美性 | 久久久久久久久久久久国产精品 | 久久免费精品 | 一区二区视频欧美 | 五月导航 | 91大神精品视频在线观看 | 中文字幕在线看视频国产中文版 | 欧美激情视频一二三区 | 亚洲更新最快 | 五月天久久 | 久久久免费看片 | www久草| 成片免费观看视频999 | 99久久久久国产精品免费 | 国产69精品久久久久99尤 | 一区二区视频网站 | 开心激情久久 | 日韩免费av在线 | 日韩免费高清在线 | 亚洲精品小区久久久久久 | 黄色免费观看 | 久久福利电影 | 精品国产一区二区三区在线观看 | 999一区二区三区 | 亚洲免费av片 | 久久99国产精品久久99 | 中文字幕av网站 | 最新三级在线 | 国产婷婷一区二区 | 国产精品第2页 | 丁香六月婷婷综合 | 国产福利一区二区三区在线观看 | 欧美在线一| 日本天天操 | 91看片淫黄大片91 | 国产成人精品aaa | 夜夜躁日日躁狠狠躁 | 欧美午夜激情网 | 婷婷色在线 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产精品亚洲人在线观看 | 久草在线资源观看 | 国产精品剧情在线亚洲 | 五月天狠狠操 | 久久资源总站 | 免费网站观看www在线观看 | 97国产大学生情侣白嫩酒店 | 国产一及片 | 欧美国产亚洲精品久久久8v |