Python 핵심 프로 그래 밍 연습 문제 의 2 - 네트워크 프로 그래 밍
연결 을 위 한 소켓
연결 되 지 않 은 소켓
통신 하기 전에 반드시 연결 을 세 워 야 한다
통신 하기 전에 연결 을 만 들 필요 가 없습니다.
직렬 화 된 신뢰 할 수 있 는 중복 되 지 않 는 데이터 전달
순서 성, 신뢰성 또는 중복 성 을 보장 할 수 없 으 며, 일정한 비용 으로 줄 일 수 없다.
기록 경계 없 음
기록 경계 저장
모든 정 보 는 여러 부분 으로 나 눌 수 있 고 모든 메시지 부분 은 목적지 에 도착 할 수 있 도록 확보 한 다음 에 그 를 순서대로 조합 할 수 있다.
소식 은 전체적으로 발송 된다.
전송 제어 프로 토 콜 (TCP)
사용자 데이터 프로 토 콜 (UDP)
2. 클 라 이언 트 / 서버 구조
3. TCP 와 UDP 에서 어떤 유형의 서버 가 연결 을 받 고 그들 을 독립 된 소켓 으로 전환 시 켜 클 라 이언 트 통신 을 합 니까?
TCP
4. TCP (tsTclnt. py) 와 UDP (tsUclnt. py) 클 라 이언 트 를 업데이트 하여 서버 이름 을 프로그램 에 하 드 코딩 하지 않 아 도 됩 니 다.
if __name__ == '__main__':
opts, args = getopt.getopt(sys.argv[1:],'',['host=','port='])
for op, value in opts:
if op == '--host':
HOST = value
elif op == '--port':
PORT = value
프로그램 에 이 코드 를 추가 하면 명령 을 입력 하여 지정 한 host 와 port 를 진행 할 수 있 습 니 다.
5. TCP 클 라 이언 트 / 서버 프로그램 을 작성 하여 서버 가 다음 명령 을 식별 할 수 있 도록 합 니 다.
import socket
from time import ctime
import os
import re
HOST = ''
PORT = 50006
ADDR = (HOST, PORT)
# ,
def list_dir(path = os.curdir):
files = os.listdir(path)
filenames = []
for file in files:
filenames.append(file)
return '
'.join(filenames)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind(ADDR)
s.listen(5)
while True:
conn, addr = s.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024)
s_data = ''
if not data: break
data = data.decode('utf-8')
# time
if data == 'time':
s_data = '[%s]'%ctime()
# os
elif data == 'os':
s_data = '[%s]'%os.name
else:
# ls
if data == 'ls':
s_data = list_dir()
else:
# ls path
patt = 'ls\s([^\s]+)'
m = re.match(patt,data)
if m:
path = m.group(1)
if os.path.exists(path):
s_data = list_dir(path)
else:
s_data = 'not exist path'
else:
s_data = 'this is no order' + data
conn.send(s_data.encode('utf-8'))
tcp_clnt. py (클 라 이언 트 코드)
import socket
HOST = 'localhost'
PORT = 50006
ADDR = (HOST, PORT)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect(ADDR)
while True:
data = input('>>> ')
if not data:break
s.send(data.encode('utf-8'))
data = s.recv(1024)
if not data:break
data = data.decode('utf-8')
print(data)
6. 세 미 듀 플 렉 스 채 팅
hdserver. py (듀 플 렉 스 채 팅 서버)
from socket import *
HOST = ''
PORT = 50006
BUFSIZE = 1024
ADDR = (HOST, PORT)
with socket(AF_INET, SOCK_STREAM) as s:
s.bind(ADDR)
s.listen(5)
while True:
conn, addr = s.accept()
with conn:
print('connected by ',addr)
while True:
data = conn.recv(BUFSIZE)
if not data:break
print('from:',data.decode('utf-8'))
data = input('to: ')
if not data:break
conn.send(data.encode('utf-8'))
hdclnt. py (반 양 방향 채 팅 클 라 이언 트)
from socket import *
HOST = 'localhost'
POST = 50006
BUFSIZE = 1024
ADDR = (HOST, POST)
with socket(AF_INET, SOCK_STREAM) as s:
s.connect(ADDR)
while True:
data = input('to: ')
if not data:break
s.send(data.encode('utf-8'))
data = s.recv(BUFSIZE)
print('from: ',(data.decode('utf-8')))
7. 듀 플 렉 스 채 팅
fdserver. py (듀 플 렉 스 서버)
from socket import *
from select import *
import sys
HOST = ''
PORT = 50007
BUFSIZE = 1024
ADDR = (HOST, PORT)
with socket(AF_INET, SOCK_STREAM) as tcp_server:
tcp_server.bind(ADDR)
tcp_server.listen(5)
inpu = [tcp_server, sys.stdin]
while True:
conn, addr = tcp_server.accept()
inpu.append(conn)
while True:
r_list, w_list,e_list = select(inpu,[],[])
for s in r_list:
if s == conn:
data = conn.recv(BUFSIZE)
if not data: break
print(data.decode('utf-8'))
else:
data = input('>>> ')
if not data: break
conn.send(data.encode('utf-8'))
fdclnt. py (듀 플 렉 스 채 팅 클 라 이언 트)
from socket import *
from select import *
import sys
HOST = 'localhost'
POST = 50007
BUFSIZE = 1024
ADDR = (HOST, POST)
with socket(AF_INET, SOCK_STREAM) as tcp_clnt:
tcp_clnt.connect(ADDR)
inpu = [tcp_clnt,sys.stdin]
while True:
r_list, w_list, e_list = select(inpu,[],[])
for s in r_list:
if s == tcp_clnt:
data = tcp_clnt.recv(BUFSIZE)
if not data: break
print((data.decode('utf-8')))
else:
data = input('>>> ')
if not data:break
tcp_clnt.send(data.encode('utf-8'))
8. 다 중 사용자 쌍방 향 채 팅
mfd_server (다 중 사용자 듀 플 렉 스 채 팅 서버 쪽)
from socket import *
import threading
HOST = ''
PORT = 21568
BUFSIZE = 1024
ADDR = (HOST, PORT)
conns = []
# ,
def deal_conn(conn):
while True:
data = conn.recv(BUFSIZE)
if not data:break
for c in conns:
if c != conn:
c.send(data)
with socket(AF_INET, SOCK_STREAM) as server:
server.bind(ADDR)
server.listen(10)
while True:
conn, addr = server.accept()
#
if conn not in conns:
for c in conns:
greet = ' %s !' %str(addr)
c.send(greet.encode('utf-8'))
conns.append(conn)
t = threading.Thread(target=deal_conn,args=(conn,))
t.start()
mfd_clnt. py (다 중 사용자 듀 플 렉 스 채 팅 클 라 이언 트)
from socket import *
from select import *
import sys
HOST = 'localhost'
POST = 21568
BUFSIZE = 1024
ADDR = (HOST, POST)
with socket(AF_INET, SOCK_STREAM) as server:
server.connect(ADDR)
inpu = [server,sys.stdin]
while True:
r_list, w_list, e_list = select(inpu,[],[])
for s in r_list:
if s == server:
data = server.recv(BUFSIZE)
if not data: break
print((data.decode('utf-8')))
else:
data = input('>>> ')
if not data:break
server.send(data.encode('utf-8'))
9. 다 중 사용자, 다 중 방, 듀 플 렉 스 채 팅 \ # \ # \ # \ # \ # \ # # # mmfdserver (다 중 사용자 다 중 방 전 쌍 작업 채 팅)
from socket import *
import re
import threading
HOST = ''
PORT = 21568
BUFSIZE = 1024
ADDR = (HOST, PORT)
rooms = {}
conns = {}
REFUSE = ' , '.encode('utf-8')
WAITING = ' '.encode('utf-8')
INPUT_ERROR = ' '.encode('utf-8')
def deal_conn(name):
while True:
conn_from = conns[name]
data = conn_from.recv(BUFSIZE)
if not data:break
if rooms[name] in conns:
conn_to = conns[rooms[name]]
conn_to.send(data)
else:
conn_from.send(WAITING)
with socket(AF_INET, SOCK_STREAM) as server:
server.bind(ADDR)
server.listen(10)
while True:
conn, addr = server.accept()
settings = conn.recv(BUFSIZE)
patt = r'name:(.+)\sto:(.+)'
m = re.match(patt,settings.decode('utf-8'))
if not m:conn.send(INPUT_ERROR)
name = m.group(1)
if name not in conns:
conns[name] = conn
to = m.group(2)
if name not in rooms and to not in rooms:
rooms[name] = to
rooms[to] = name
elif name in rooms and rooms[name] != to:
del conns[name]
if name in rooms:
del rooms[name]
conn.send(REFUSE)
conn.close()
t = threading.Thread(target=deal_conn,args=(name,))
t.start()
mmfd_clnt (다 중 사용자 다 중 방 전 쌍 작업 채 팅)
from socket import *
from select import *
import sys
HOST = 'localhost'
POST = 21568
BUFSIZE = 1024
ADDR = (HOST, POST)
with socket(AF_INET, SOCK_STREAM) as server:
server.connect(ADDR)
inpu = [server,sys.stdin]
print(" ( name: to: )")
data = input('')
server.send(data.encode('utf-8'))
while True:
r_list, w_list, e_list = select(inpu,[],[])
for s in r_list:
if s == server:
data = server.recv(BUFSIZE)
if not data: break
print((data.decode('utf-8')))
else:
data = input('>>> ')
if not data:break
server.send(data.encode('utf-8'))
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.