go server

原创 2016年06月01日 23:40:42

package main

import (
 "database/sql"
 "fmt"
 _ "github.com/go-sql-driver/mysql"
 "net"
 "strings"
)

var maps map[string]net.Conn = make(map[string]net.Conn)

func find(findId string) string {
 db, err := sql.Open("mysql", "root:123@/liaotian?charset=utf8")
 check(err)

 rows, err := db.Query("SELECT * FROM user")
 check(err)

 defer rows.Close()
 for rows.Next() {

  var id int
  var name string
  var pwd string

  err := rows.Scan(&id, &name, &pwd)
  check(err)

  str := fmt.Sprintf("%d", id)

  if strings.EqualFold(str, findId) {
   return "success"
  }
 }
 return "fail"
}

func login(userId, upwd string) string {
 db, err := sql.Open("mysql", "root:123@/liaotian?charset=utf8")
 check(err)

 rows, err := db.Query("SELECT * FROM user")
 check(err)

 defer rows.Close()

 for rows.Next() {

  var id int
  var name string
  var pwd string

  err := rows.Scan(&id, &name, &pwd)
  check(err)
       //将int转换成string
  str := fmt.Sprintf("%d", id)

  if strings.EqualFold(str, userId) && strings.EqualFold(pwd, upwd) {
   return "success"
  }
 }
 return "fail"
}

func regist(name, pwd string) int64 {
 db, err := sql.Open("mysql", "root:123@/liaotian?charset=utf8")
 check(err)

 stmt, err := db.Prepare(`INSERT user (username,password) values (?,?)`)
 check(err)

 defer stmt.Close()
 res, err := stmt.Exec(name, pwd)

 if err != nil {
  fmt.Println(err)
  return 0
 }

 cuid, err := res.LastInsertId()
 return cuid
}

func check(err error) {
 if err != nil {
  fmt.Println(err)
  return
 }
}

func writetext(conn net.Conn, con string) {

 j := "3-" + con + "\n"
 a := []byte(j)
 conn.Write(a)
}

func writefind(conn net.Conn, re, findId string) {

 j := "44-" + re + "-" + findId + "\n"
 a := []byte(j)
 conn.Write(a)
}

func writelogin(conn net.Conn, re, userId, pwd string) {

 j := "2-" + re + "-" + userId + "-" + pwd + "\n"
 a := []byte(j)
 conn.Write(a)
}

func writeregist(conn net.Conn, userId int64) {

 str := fmt.Sprintf("%d", userId)
 j := "1-" + str + "\n"
 a := []byte(j)
 conn.Write(a)
}

func read(conn net.Conn) string {

 var str string
 name := make([]byte, 512)
 size, err := conn.Read(name)
 str = string(name)
 fmt.Println(size)
 check(err)
 return str
}

func doServerStuff(conn net.Conn) {
 
 remote := conn.RemoteAddr().String()
 fmt.Println(remote, " connected!")

 for {

  var s []string

  var types string = read(conn)
  s = strings.Split(types, "-&*%$")

  var ty = s[0]

  switch {
  case strings.EqualFold(ty, "regist"):

   var name = s[1]
   var pwd = s[2]
   var userId int64 = regist(name, pwd)

   writeregist(conn, userId)

  case strings.EqualFold(ty, "login"):

   var id = s[1]
   var pwd = s[2]

   ret := login(id, pwd)
   writelogin(conn, ret, id, pwd)

   if strings.EqualFold(ret, "success") {
    maps[id] = conn
    fmt.Println(id)
   }

  case strings.EqualFold(ty, "find"):

   var finderid = s[1]
   ret := find(finderid)
   writefind(conn, ret, finderid)

  case strings.EqualFold(ty, "text"):

   var con = s[1]
   var finderid = s[2]
   fmt.Println(finderid)
   fconn := maps[finderid]
   writetext(fconn, con)

  case strings.EqualFold(ty, "uuid"):

   var uuid = s[1]
   maps[uuid] = conn

  case strings.EqualFold(ty, "exit"):

   var uuid = s[1]
   var uid = s[2]
   fmt.Println(uid)

   delete(maps, uuid)

   if !(strings.EqualFold(uid, "null")) {
    delete(maps, uid)
   }
   conn.Close()
   return
  default:
   fmt.Println("fali.....")
  }
 }
}

func main() {
 fmt.Println("Starting the server...")
 listener, err := net.Listen("tcp", ":8888")
 check(err)

 for {
  conn, err := listener.Accept()
  check(err)

  go doServerStuff(conn)
 }
}

go语言学习之-------go httpserver进阶之路(1)

package main import ( "io" "net/http" //"strings" "time" ) var ( server = &htt...
  • chenxun2009
  • chenxun2009
  • 2017年07月04日 19:35
  • 2154

Go语言最简单的tcp server/client

Go语言最简单的tcp server/client
  • shanshanpt
  • shanshanpt
  • 2016年11月08日 14:02
  • 1099

快速搭建HTTP服务器 go http server

go http server 例子,自定义路由。 package main import ( "fmt" "net/http" "reflect" "strings"...
  • chenxun2009
  • chenxun2009
  • 2017年06月28日 18:34
  • 1065

Go语言Http Server源码阅读

转自:http://www.cnblogs.com/yjf512/archive/2012/08/22/2650873.html 这篇文章出现的理由是业务上需要创建一个Web Server。创建...
  • LeoHsiun
  • LeoHsiun
  • 2015年04月29日 20:24
  • 1527

SQL Server Go 语句

go 是SYBASE和SQL Server中用来表示事物结束,提交并确认结果,相当于ORACLE的CommitSQL Server 实用工具将 GO 解释为应将当前的 Transact-SQL 批处理...
  • u013160017
  • u013160017
  • 2015年10月19日 01:50
  • 1701

Go语言 简单的http服务器示例

一个简单的http服务器代码 package main import ( "io" "net/http" "log" ) func HelloServe...
  • abv123456789
  • abv123456789
  • 2014年04月20日 16:06
  • 7982

用Go写一个简单的TCP server or client 模型

对Conn封装的基本思路go内置了net包已经很好的封装了socket通讯。然而在实际使用中,由于net/Conn的Read/Write方法是堵塞的原因,必须将其放入单独的goroutine中进行处理...
  • sryan
  • sryan
  • 2016年07月14日 16:52
  • 5292

[GO]连接Sql Server 操作

//sql server 连接实例     //db, err := sql.Open("adodb", "Provider=SQLOLEDB;Initial Catalog=fvlog;Data ...
  • zjgdtl
  • zjgdtl
  • 2015年05月05日 15:35
  • 771

sql server中GO的作用

GO的意思是本语句块结束的意思比方 declare @num int go set @num = 0 select @num 这样的话,系统就会出错,因为你写GO的时候 表示 @num ...
  • whw6263989
  • whw6263989
  • 2012年08月02日 14:18
  • 557

SQL Server 中 GO 的用法

本科里学了那么多年SQL Server一直看到书上各种SQL语句中间夹杂着那么几个看似毫无意义的GO,看着就让人莫名,问老师,老师一般只会告诉你,不要理他,这个东西没用的。但是个性纠结并且有轻微强迫症...
  • zhangqidashu
  • zhangqidashu
  • 2013年12月10日 21:26
  • 11710
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:go server
举报原因:
原因补充:

(最多只允许输入30个字)