채팅 시스템 - 서버 측

12297 단어 go채팅 시스템

채팅 시스템 - 서버 측

package main

import (
	"fmt"
	"log"
	"net"
)

func main() {
	port := "9090"
	StartServer(port)
}

// 
func StartServer(port string) {
	host := ":" + port
	// tcp 
	tcpAddr, err := net.ResolveTCPAddr("tcp4", host)
	if err != nil {
		log.Printf("resolve tcp addr failed:%v/n", err)
		return
	}

	// 
	listener, err := net.ListenTCP("tcp", tcpAddr)
	if err != nil {
		log.Printf("Listen tcp port failed:%v
"
, err) return } // , conns := make(map[string]net.Conn) // messageChan := make(chan string, 10) // BroadMessage(&conns, messageChan) // for { fmt.Printf("listening port %s ...
"
, port) conn, err := listener.AcceptTCP() if err != nil { log.Printf("Accept failed:%v
"
, err) continue } // conns[conn.RemoteAddr().String()] = conn fmt.Println(conns) // Handler(conn, &conns, messageChan) } } func Handler(conn net.Conn, conns *map[string]net.Conn, messages chan string) { buf := make([]byte, 1024) for { length, err := conn.Read(buf) if err != nil { log.Printf("read client message failed:%v
"
, err) delete(*conns, conn.RemoteAddr().String()) conn.Close() break } // recvStr := string(buf[0:length]) messages recvStr } } // func BroadMessage(conns *map[string]net.Conn, messages chan string) { for { // msg := messages fmt.Println(msg) // for key, conn := range *conns { _, err := conn.Write([]byte(msg)) if err != nil { log.Printf("broad message to %s failed:%v
"
, key, err) delete(*conns, key) } } } }

좋은 웹페이지 즐겨찾기