Skip to content

Commit fb4aac4

Browse files
committed
Update
1 parent e90f93c commit fb4aac4

File tree

1 file changed

+66
-37
lines changed
  • examples/socket/tcp_textproto

1 file changed

+66
-37
lines changed

examples/socket/tcp_textproto/main.go

+66-37
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,14 @@ func runServer() error {
7878
defer conn.Close()
7979

8080
// net/textprotoの接続として処理
81+
//
82+
// textproto.NewConn() は、引数に io.ReadWriteCloser を要求しているが
83+
// net.Conn は、os.Fileと同様に io.ReadWriteCloser を実装している。
8184
tpConn := textproto.NewConn(conn)
8285
defer tpConn.Close()
8386

8487
// ウェルカムメッセージ
85-
err = tpConn.PrintfLine("%d %s", OK, "ようこそ! コマンド: GET, SET, QUIT")
88+
err = tpConn.PrintfLine("%d %s", OK, "WELCOME AVAILABLE COMMANDS: {SET, GET, QUIT}")
8689
if err != nil {
8790
return err
8891
}
@@ -133,60 +136,86 @@ func runClient() error {
133136
tpConn := textproto.NewConn(conn)
134137
defer tpConn.Close()
135138

136-
code, message, err := tpConn.ReadCodeLine(OK)
137-
if err != nil {
138-
return err
139-
}
139+
// helper funcs
140+
var (
141+
send = func(tp *textproto.Conn, msg string) error {
142+
fmt.Printf("< %s\n", msg)
143+
return tp.PrintfLine("%s", msg)
144+
}
145+
recv = func(tp *textproto.Conn) error {
146+
code, msg, err := tp.ReadCodeLine(OK)
147+
if err != nil {
148+
return err
149+
}
150+
fmt.Printf("%d %s\n", code, msg)
151+
152+
return nil
153+
}
154+
)
140155

141-
fmt.Printf("%d %s\n", code, message)
156+
// WELCOME
157+
{
158+
err = recv(tpConn)
159+
if err != nil {
160+
return err
161+
}
162+
}
142163

143164
// SET
144165
m := fmt.Sprintf("%s %s %s", CmdSet, "Hello", "World")
145-
fmt.Printf("< %s\n", m)
146-
147-
err = tpConn.PrintfLine("%s", m)
148-
if err != nil {
149-
return err
150-
}
166+
{
167+
err = send(tpConn, m)
168+
if err != nil {
169+
return err
170+
}
151171

152-
code, message, err = tpConn.ReadCodeLine(OK)
153-
if err != nil {
154-
return err
172+
err = recv(tpConn)
173+
if err != nil {
174+
return err
175+
}
155176
}
156177

157-
fmt.Printf("%d %s\n", code, message)
158-
159178
// GET
160179
m = fmt.Sprintf("%s %s", CmdGet, "Hello")
161-
fmt.Printf("< %s\n", m)
180+
{
181+
err = send(tpConn, m)
182+
if err != nil {
183+
return err
184+
}
162185

163-
err = tpConn.PrintfLine("%s", m)
164-
if err != nil {
165-
return err
186+
err = recv(tpConn)
187+
if err != nil {
188+
return err
189+
}
166190
}
167191

168-
code, message, err = tpConn.ReadCodeLine(OK)
169-
if err != nil {
170-
return err
171-
}
192+
// 存在しないコマンド
193+
m = fmt.Sprintf("%s %s", "GOLANG", "HELLO")
194+
{
195+
err = send(tpConn, m)
196+
if err != nil {
197+
return err
198+
}
172199

173-
fmt.Printf("%d %s\n", code, message)
200+
err = recv(tpConn)
201+
if err != nil {
202+
fmt.Printf("%[1]s (%[1]T)\n", err)
203+
}
204+
}
174205

175206
// QUIT
176207
m = CmdQuit
177-
fmt.Printf("< %s\n", m)
178-
179-
err = tpConn.PrintfLine("%s", m)
180-
if err != nil {
181-
return err
182-
}
208+
{
209+
err = send(tpConn, m)
210+
if err != nil {
211+
return err
212+
}
183213

184-
code, message, err = tpConn.ReadCodeLine(OK)
185-
if err != nil {
186-
return err
214+
err = recv(tpConn)
215+
if err != nil {
216+
return err
217+
}
187218
}
188219

189-
fmt.Printf("%d %s\n", code, message)
190-
191220
return nil
192221
}

0 commit comments

Comments
 (0)