Skip to content

Commit 14f32d7

Browse files
committed
Update
1 parent f71c77c commit 14f32d7

File tree

3 files changed

+107
-26
lines changed

3 files changed

+107
-26
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
version: '3'
2+
3+
tasks:
4+
build:
5+
cmds:
6+
- (cd client; go build)
7+
- (cd server; go build)
8+
run:
9+
cmds:
10+
- task: build
11+
- task: start-server
12+
- task: run-client
13+
start-server:
14+
cmds:
15+
- (cd server; ./server)
16+
run-client:
17+
cmds:
18+
- (cd client; ./client)
19+
kill-server:
20+
cmds:
21+
- pkill server
22+
clean:
23+
cmds:
24+
- (cd client; go clean)
25+
- (cd server; go clean)
26+
- find . -type f -name "*.PID" -exec rm -rf {} \;

examples/singleapp/socket/tcp_basic/client/main.go

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
package main
1212

1313
import (
14+
"bytes"
1415
"errors"
1516
"io"
1617
"log"
@@ -54,29 +55,56 @@ func main() {
5455

5556
_, err = conn.Write(message)
5657
if err != nil {
57-
appLog.Printf("error at conn.Write (%v)", err)
58+
errLog.Printf("error at conn.Write (%v)", err)
59+
return
60+
}
61+
62+
err = conn.CloseWrite()
63+
if err != nil {
64+
errLog.Printf("error at conn.Write (%v)", err)
5865
return
5966
}
6067

6168
//
6269
// 受信
6370
//
6471
var (
65-
buf = make([]byte, 4096)
72+
buf = new(bytes.Buffer)
6673
bytesRead int
6774
)
6875

69-
bytesRead, err = conn.Read(buf)
70-
switch {
71-
case err != nil && !errors.Is(err, io.EOF):
72-
appLog.Printf("error at conn.Read (%v)", err)
73-
return
74-
case bytesRead == 0:
75-
appLog.Printf("closed by remote")
76-
return
77-
default:
78-
appLog.Printf("%d bytes recv", bytesRead)
76+
for {
77+
var (
78+
chunk = make([]byte, 1)
79+
chunkSize int
80+
)
81+
82+
chunkSize, err = conn.Read(chunk)
83+
appLog.Printf("chunk recv: %dbyte(s)\terr:%v", chunkSize, err)
84+
85+
if err != nil {
86+
if errors.Is(err, io.EOF) {
87+
bytesRead += chunkSize
88+
buf.Write(chunk)
89+
break
90+
}
91+
92+
errLog.Printf("error at conn.Read (%v)", err)
93+
return
94+
}
95+
96+
if chunkSize == 0 {
97+
appLog.Printf("closed by remote")
98+
return
99+
}
100+
101+
bytesRead += chunkSize
102+
buf.Write(chunk)
79103
}
104+
appLog.Printf("%d bytes recv", bytesRead)
80105

81-
appLog.Printf("recv: %s\n", buf[:bytesRead])
106+
var (
107+
data = buf.Bytes()[:bytesRead]
108+
)
109+
appLog.Printf("recv: %s\n", data)
82110
}

examples/singleapp/socket/tcp_basic/server/main.go

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -91,36 +91,63 @@ func main() {
9191
// 受信
9292
//
9393
var (
94-
chunk = make([]byte, 4096)
94+
buf = new(bytes.Buffer)
9595
bytesRead int
9696
)
9797

98-
bytesRead, err = conn.Read(chunk)
99-
switch {
100-
case err != nil && !errors.Is(err, io.EOF):
101-
appLog.Printf("error at conn.Read (%v)", err)
102-
return
103-
case bytesRead == 0:
104-
appLog.Printf("closed by remote")
105-
return
106-
default:
107-
appLog.Printf("%d bytes recv", bytesRead)
98+
for {
99+
var (
100+
chunk = make([]byte, 1)
101+
chunkSize int
102+
)
103+
104+
chunkSize, err = conn.Read(chunk)
105+
appLog.Printf("chunk recv: %dbyte(s)\terr:%v", chunkSize, err)
106+
107+
if err != nil {
108+
if errors.Is(err, io.EOF) {
109+
bytesRead += chunkSize
110+
buf.Write(chunk)
111+
break
112+
}
113+
114+
appLog.Printf("error at conn.Read (%v)", err)
115+
return
116+
}
117+
118+
if chunkSize == 0 {
119+
appLog.Printf("closed by remote")
120+
return
121+
}
122+
123+
bytesRead += chunkSize
124+
buf.Write(chunk)
108125
}
126+
appLog.Printf("%d bytes recv", bytesRead)
109127

110-
appLog.Printf("recv: %s\n", chunk[:bytesRead])
128+
var (
129+
data = buf.Bytes()[:bytesRead]
130+
)
131+
appLog.Printf("recv: %s\n", data)
111132

112133
//
113134
// 送信
114135
//
115136
var (
116-
message = bytes.ToUpper(chunk[:bytesRead])
137+
message = bytes.ToUpper(data)
117138
)
118139

119140
_, err = conn.Write(message)
120141
if err != nil {
121142
errLog.Printf("error at client writeto (%v)", err)
122143
return
123144
}
145+
146+
err = conn.CloseWrite()
147+
if err != nil {
148+
errLog.Printf("error at conn closewrite (%v)", err)
149+
return
150+
}
124151
}()
125152
}
126153
}

0 commit comments

Comments
 (0)