-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
331 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
package main | ||
|
||
import ( | ||
"net" | ||
"time" | ||
"Go-example/Debug" | ||
"bytes" | ||
"bufio" | ||
"os" | ||
"strings" | ||
"fmt" | ||
) | ||
|
||
const ( | ||
RE = '\t' | ||
) | ||
|
||
func ClientInit(netWork, address string) { | ||
conn, err := net.DialTimeout(netWork, address, 2*time.Second) | ||
if err != nil { | ||
Debug.RenderClient("Dial Error: %s", err) | ||
return | ||
} | ||
defer conn.Close() | ||
Debug.RenderClient("Connected to server. (remote address: %s, local address: %s)", | ||
conn.RemoteAddr(), conn.LocalAddr()) | ||
for { | ||
cmdReader := bufio.NewReader(os.Stdin) | ||
cmdStr, err := cmdReader.ReadString('\n') | ||
if err != nil{ | ||
break | ||
} | ||
//这里把读取的数据后面的换行去掉,对于Mac是"\r",Linux下面 | ||
//是"\n",Windows下面是"\r\n",所以为了支持多平台,直接用 | ||
//"\r\n"作为过滤字符 | ||
cmdStr = strings.Trim(cmdStr, "\r\n") | ||
time.Sleep(200 * time.Millisecond) | ||
conn.SetDeadline(time.Now().Add(5 * time.Millisecond)) | ||
var buffer bytes.Buffer | ||
buffer.WriteString(cmdStr) | ||
var delimiter byte | ||
delimiter = '\t' | ||
buffer.WriteByte(delimiter) | ||
conn.Write(buffer.Bytes()) | ||
} | ||
} | ||
|
||
func readClient(conn net.Conn, delimiter string) (string, error) { | ||
readBytes := make([]byte, 1) | ||
var buffer bytes.Buffer | ||
for { | ||
_, err := conn.Read(readBytes) | ||
if err != nil { | ||
return "", err | ||
} | ||
readByte := readBytes[0] | ||
if string(readByte) == delimiter { | ||
break | ||
} | ||
buffer.WriteByte(readByte) | ||
} | ||
return buffer.String(), nil | ||
} | ||
func main() { | ||
ClientInit("tcp", "127.0.0.1:9630") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
package main | ||
|
||
import ( | ||
"net" | ||
"Go-example/Debug" | ||
"fmt" | ||
"bytes" | ||
"io" | ||
"strings" | ||
) | ||
|
||
func serverInit(netWork, address, delimiter string) { | ||
var listener net.Listener | ||
listener, err := net.Listen(netWork, address) // 1. 开始监听9630 端口 | ||
if err != nil { | ||
Debug.ErrorMsg(err) | ||
return | ||
} | ||
defer listener.Close() // 2. 代码结束后释放监听资源 | ||
fmt.Printf("建立连接成功 %s\n", listener.Addr()) | ||
for { | ||
conn, err := listener.Accept() // 阻塞直至新连接到来。 | ||
if err != nil { | ||
Debug.RenderServer("Accept Error: %s", err) | ||
} | ||
go func(conn net.Conn) { // 3. 连接建立成功 | ||
defer func() { // 4. 连接结束释放资源 | ||
conn.Close() | ||
//wg.Done() | ||
}() | ||
client := strings.Replace(conn.RemoteAddr().String(), "127.0.0.1:", "", 3) | ||
Debug.RenderServer("%s 加入进来了", client) | ||
for { | ||
//conn.SetReadDeadline(time.Now().Add(30 * time.Second)) // 设置读取长 | ||
strReq, err := readServer(conn, delimiter) | ||
if err != nil { | ||
if err == io.EOF { | ||
Debug.RenderServer(" %s 断开了连接", client) | ||
} else { | ||
Debug.RenderServer("Read Error: %s", err) | ||
} | ||
break | ||
} | ||
Debug.RenderServer("%s 说:%s", client, strReq) | ||
} | ||
}(conn) | ||
} | ||
} | ||
|
||
func readServer(conn net.Conn, delimiter string) (string, error) { | ||
readBytes := make([]byte, 1) | ||
var buffer bytes.Buffer | ||
for { | ||
_, err := conn.Read(readBytes) | ||
if err != nil { | ||
return "", err | ||
} | ||
readByte := readBytes[0] | ||
if string(readByte) == delimiter { | ||
break | ||
} | ||
buffer.WriteByte(readByte) | ||
} | ||
return buffer.String(), nil | ||
} | ||
|
||
func main() { | ||
serverInit("tcp", "127.0.0.1:9630", "\t") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters