浏览代码

python echo add

tobby48 5 年前
父节点
当前提交
b622174d4b
共有 2 个文件被更改,包括 37 次插入0 次删除
  1. 15
    0
      src/kr/co/swh/lecture/network/echo/echoclient.py
  2. 22
    0
      src/kr/co/swh/lecture/network/echo/echoserver.py

+ 15
- 0
src/kr/co/swh/lecture/network/echo/echoclient.py 查看文件

@@ -0,0 +1,15 @@
1
+import socket
2
+
3
+def run():
4
+  with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
5
+    s.connect(('127.0.0.1', 4000))
6
+    print("클라이언트 소켓정보 : ", s)
7
+    while True:
8
+        line = input(':')
9
+        s.sendall(line.encode())    # 서버가 빈 데이터를 받고 연결을 종료할 수 있도록
10
+        if not line: break         # 빈 데이터를 먼저 보낸 후 루프를 탈출
11
+        data = s.recv(1024)
12
+        print("서버로 부터 전달받은 문자열 : ", data.decode())
13
+
14
+if __name__ == '__main__':
15
+  run()

+ 22
- 0
src/kr/co/swh/lecture/network/echo/echoserver.py 查看文件

@@ -0,0 +1,22 @@
1
+import socket
2
+
3
+def run_server(port=4000):
4
+    host = ''
5
+    # socket.AF_INET 은 IP4v 주소체계(socket.AF_INET6 은 IP6v), socket.SOCK_STREAM은 소켓의 타입
6
+    # socket.AF_INET와 socket.SOCK_STREAM은 디폴트 값이므로 socket.socket() 로 코드를 작성해도 된다.
7
+    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
8
+        s.bind((host, port))
9
+        s.listen()
10
+        conn, addr = s.accept()     # accept함수의 결과는 튜플형이며, conn은 서버 소켓에 대한 정보, addr은 클라이언트의 정보
11
+        print("서버 소켓정보 : ", conn)
12
+        print("연결된 클라이언트 정보 : ", addr)
13
+        while True:
14
+            data = conn.recv(1024)  # 변수 msg 은 바이트형이며, 클라이언트로 부터 받은 메세지가 저장된다. recv함수의 매개변수는 바이트 크기
15
+            if not data: break
16
+            print(type(data))
17
+            print("클라이언트로부터 전송받은 문자열 : ", data.decode())
18
+            conn.sendall(data)      # 메세지를 연결된 클라이언트에게 전달
19
+        conn.close()
20
+
21
+if __name__ == '__main__':
22
+  run_server()