diff --git a/network/WebSocketServer/Makefile b/network/WebSocketServer/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..b4b1142db24d0a9e29e94587096e28e7ab8e2b0b --- /dev/null +++ b/network/WebSocketServer/Makefile @@ -0,0 +1,7 @@ +GOROOT = D:\Go +GOPATH=D:\maosiping\go;D:\Go;C:\Users\Administrator\go +build: + D:\Go\bin\go.exe build -o websocket_server.exe C:\Users\Administrator\go\src\awesomeProject\main\main.go + +run: build + .\websocket_server.exe \ No newline at end of file diff --git a/network/WebSocketServer/README.md b/network/WebSocketServer/README.md new file mode 100644 index 0000000000000000000000000000000000000000..cd39132cd26892a988d6335d7dba8dfedb6dff03 --- /dev/null +++ b/network/WebSocketServer/README.md @@ -0,0 +1,6 @@ +## WebSockt服务器使用说明 + +1、使用电脑打开本目录下`websocket_server.exe`可执行文件。 + +2、打开电脑`cmd`命令,输入`ipconfig`,查看电脑IP地址,此IP即为WebSocket所需绑定的服务器IP。 + diff --git a/network/WebSocketServer/main/main.go b/network/WebSocketServer/main/main.go new file mode 100644 index 0000000000000000000000000000000000000000..5818d55ff92696ebe1f9346cbcb2e108d2d49f34 --- /dev/null +++ b/network/WebSocketServer/main/main.go @@ -0,0 +1,132 @@ +package main + +import ( + "fmt" + "github.com/gorilla/websocket" + "log" + "net/http" + "time" +) + +func PrintInfoWithTime() { + fmt.Print("[" + time.Now().Format("2006 01 02 15 04 05") + "]") +} + +func MyPrint(a ...interface{}) { + PrintInfoWithTime() + fmt.Println(a) +} + +var upgrader = websocket.Upgrader{ + CheckOrigin: func(r *http.Request) bool { + return true + }, +} + +var a = 0 + +func StringHandler(w http.ResponseWriter, r *http.Request) { + MyPrint("Header begin") + for k, v := range r.Header { + MyPrint(k, v) + } + MyPrint(r.Method) + + conn, err := upgrader.Upgrade(w, r, nil) + if err != nil { + log.Println("Error during connection upgrade: ", err) + return + } + defer conn.Close() + + for { + messageType, message, err := conn.ReadMessage() + if err != nil { + log.Println("Error during read message: ", err) + break + } + log.Printf("Recv from Client: %s %d", message, messageType) + err = conn.WriteMessage(websocket.TextMessage, []byte(message)) + if err != nil { + log.Println("Error during write: ", err) + break + } + conn.SetCloseHandler(func(code int, text string) error { + log.Printf("Close Info: %s %d", text, code) + return nil + }) + + a += 1 + if a > 400000 { + conn.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseGoingAway, "GoAway")) + log.Println("a = ", a) + conn.Close() + } + } +} + +func BinaryHandler(w http.ResponseWriter, r *http.Request) { + MyPrint("Header begin") + for k, v := range r.Header { + MyPrint(k, v) + } + MyPrint(r.Method) + + conn, err := upgrader.Upgrade(w, r, nil) + if err != nil { + log.Println("Error during connection upgrade: ", err) + return + } + defer conn.Close() + + for { + messageType, message, err := conn.ReadMessage() + if err != nil { + log.Println("Error during read message: ", err) + break + } + log.Printf("Recv from Client: %s %d", message, messageType) + err = conn.WriteMessage(websocket.BinaryMessage, []byte("BinaryHandler")) + if err != nil { + log.Println("Error during write: ", err) + break + } + conn.SetCloseHandler(func(code int, text string) error { + log.Printf("Close Info: %s %d", text, code) + return nil + }) + + a += 1 + if a > 400000 { + conn.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseGoingAway, "GoAway")) + log.Println("a = ", a) + conn.Close() + } + } +} + +func home(w http.ResponseWriter, r *http.Request) { + MyPrint("Header begin") + for k, v := range r.Header { + MyPrint(k, v) + } + w.Header().Add("Content-Type", "application/octet-stream") + _, err := w.Write([]byte("Hello Binary")) + if err != nil { + return + } + MyPrint(r.Method) +} + +func main() { + http.HandleFunc("/binary", BinaryHandler) + http.HandleFunc("/string", StringHandler) + http.HandleFunc("/", home) + go func() { + err := http.ListenAndServe("0.0.0.0:80", nil) + if err != nil { + panic(err) + } + }() + log.Fatal(http.ListenAndServeTLS("0.0.0.0:443", "server.crt", "server.key", nil)) +} diff --git a/network/WebSocketServer/server.crt b/network/WebSocketServer/server.crt new file mode 100644 index 0000000000000000000000000000000000000000..566cfc2faedffd5fa36d99c9c13c86055f01d597 --- /dev/null +++ b/network/WebSocketServer/server.crt @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIICDDCCAXUCFCcA7lPjL4tftJRiIuDjUvpLj/fkMA0GCSqGSIb3DQEBCwUAMEUx +CzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRl +cm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMjIwMzMwMTIwMDEwWhcNMzIwMzI3MTIw +MDEwWjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UE +CgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GN +ADCBiQKBgQDbrh9/7ba1Qytu4P6avFuBZA4htz3oLohtmQ9JKNzDal9yvJYwncd9 +jUVWlvhffaiLNdrcRFIuD4vhDeKnfEbCm3EMXYCUrlnEp1ADyUI8AER/fZTq/C0l +LHjW3+6KdOb5i7gfrzQeUiwhxhREGE7t6Dk5bgJ+cXXD9lG/M3isXwIDAQABMA0G +CSqGSIb3DQEBCwUAA4GBAANWb1Rlyro50IGHnWMPp1iATR2euFg8pNk/IlG45Int +AGMRqI+oYKo78SGC1tr3upOWxr+wRRlr3npXiCDQxnSYbz0enS1OoRC+f45n7gdE +fWhiGyGyZZI/yxJaJalzYNEshnOOQnwfLvBZDfbpsLP2unqD1bpV3r+0F29uiV3p +-----END CERTIFICATE----- diff --git a/network/WebSocketServer/server.csr b/network/WebSocketServer/server.csr new file mode 100644 index 0000000000000000000000000000000000000000..9a9d640d5ad6a54fb1b5a75c76bec116f9c70c15 --- /dev/null +++ b/network/WebSocketServer/server.csr @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIBhDCB7gIBADBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEh +MB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEB +AQUAA4GNADCBiQKBgQDbrh9/7ba1Qytu4P6avFuBZA4htz3oLohtmQ9JKNzDal9y +vJYwncd9jUVWlvhffaiLNdrcRFIuD4vhDeKnfEbCm3EMXYCUrlnEp1ADyUI8AER/ +fZTq/C0lLHjW3+6KdOb5i7gfrzQeUiwhxhREGE7t6Dk5bgJ+cXXD9lG/M3isXwID +AQABoAAwDQYJKoZIhvcNAQELBQADgYEAseiBRRpLasSG2GAs1xnDeseRMLycuU8S +X86JJu61xdKuEGY0riuQMRoPfxikSafrQbocifSN0ssKMc0gw5Z9GG+hQZN4pMWu +3DdvkJ8sFTD+Pp7k4mgcTAmeTfmYxQ8UP4KPzOmdSGvItcTUcFlGUVWAFh7seFR9 +JOGVHL2VoeI= +-----END CERTIFICATE REQUEST----- diff --git a/network/WebSocketServer/server.key b/network/WebSocketServer/server.key new file mode 100644 index 0000000000000000000000000000000000000000..d13c65e16c6cdebce8d1a3fe22ef3ad1e18ea5a8 --- /dev/null +++ b/network/WebSocketServer/server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXQIBAAKBgQDbrh9/7ba1Qytu4P6avFuBZA4htz3oLohtmQ9JKNzDal9yvJYw +ncd9jUVWlvhffaiLNdrcRFIuD4vhDeKnfEbCm3EMXYCUrlnEp1ADyUI8AER/fZTq +/C0lLHjW3+6KdOb5i7gfrzQeUiwhxhREGE7t6Dk5bgJ+cXXD9lG/M3isXwIDAQAB +AoGAJagJWkKDSTsEXPNQcXHMNbfS/FCO2hfv5umPxzir7wty5RYSoK7LHWhz9E3Y +sXW2yHYo2A0WETM1BRT+Pzt8XVoghDm8uMgWDlzKdA8dXHWVgK9940hWL1ULIWHQ +3UOVFsuQKMJ9cHkRlgkReJt9n8Hc6GUdXF/ztiOJvc+tNTECQQD6Py1xd5bQJTYF +IL8CsAN30q8tBamQfJDdROP/pBR0oyxUMppB4gHKSraBUqD/IcO3Knv+Gdr4YrZ1 +Oa6HqAZdAkEA4LsL2qYr1e/dL+g98vmwGknWZjHxqF0L07oo/6/jay2NTfgAJfG9 +8vuN79wUGs/XqlHpvIcGzG5LL4QMoM7Z6wJAfE3pmtVWmqoBPWbYutMHxftnfKu1 +YMofg2n2/0NXzeBH4sMIEPXdAck/AtoykskI2PFHih75wCv4ih5O7Z+vGQJBAIfb +K8Bjwo5TsnCawpCXt4k85/rh6Ihyr4qwuMZRy3bok8r1yQknSkCRKG4/qnvG+EbD +vDy3mDmP164C8ytnwT8CQQCYwAUh52nGZyWJ+I3aO5SSCD3i7/hnyenAkvE/7Iyr +MU60twDP/Po7gSJMlB0na+Pelbo99aAxbyMSzexW3opx +-----END RSA PRIVATE KEY----- diff --git a/network/WebSocketServer/websocket_server.exe b/network/WebSocketServer/websocket_server.exe new file mode 100644 index 0000000000000000000000000000000000000000..b24c2b8633f03a21e970b9088cceb87223aa774b Binary files /dev/null and b/network/WebSocketServer/websocket_server.exe differ