Python入門(十五)socketプログラミング
2232 ワード
Socketネットワークプログラミングのコードを書いたことがあります.tcpサーバの主なステップは、socket->bind-->listen-->accept-->recv/send-->closeです.tcpクライアントの主なステップは、socket->connect-->recv/send-->closeです.上記のことを知っていると、Pythonのsocketプログラミングも似ているような気がします.
echoサービスを例に説明します.
1)まずサービス側のコード:
2)echoクライアントコード:
上記は単純なechoサービスであり,socketモジュールにおけるソケットプログラミングに関する方法を簡単に示した.
実際のネットワーク開発では,主なモデルとして,マルチプロセス,マルチスレッド,イベント駆動select/epoll,非同期非ブロックがある.これらは後の文章でそれぞれ説明します.
echoサービスを例に説明します.
1)まずサービス側のコード:
# This is a echo server.
import socket
import sys
try:
#1. create socket
serv_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
print("socket failed")
sys.exit(-1)
print("socket success")
# serv_addr = ('127.0.0.1', 8080)
host = ''
port = 8000
#2. bind to 8000 port and listen
serv_sock.bind((host, port))
serv_sock.listen(5)
while True:
#3. accept connection from client
client_sock, client_addr = serv_sock.accept()
print("connected by ", client_addr)
while True:
buf = client_sock.recv(10240)
if not buf:
print("Exit", client_addr)
client_sock.close()
break
else:
print("recv from client: ", buf)
client_sock.send(buf)
2)echoクライアントコード:
# This is a echo client.
import socket
import sys
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
print('socket failed!')
sys.exit(-1)
print("socket success")
# serv_addr = ('127.0.0.1', 8080)
host = '127.0.0.1'
port = 8000
try:
sock.connect((host, port))
except socket.error:
print("connect %s failed" % host)
sys.exit(-1)
while True:
try:
#message = "hello"
message = input(">>")
if not message:
break
else:
sock.sendall(message.encode('utf8'))
reply = sock.recv(10240)
print('reply: %s' % reply.decode('utf8'))
except EOFError:
print("EOF
")
break
print("Exit...")
#sock.shutdown(socket.SHUT_RDWR)
sock.close()
上記は単純なechoサービスであり,socketモジュールにおけるソケットプログラミングに関する方法を簡単に示した.
実際のネットワーク開発では,主なモデルとして,マルチプロセス,マルチスレッド,イベント駆動select/epoll,非同期非ブロックがある.これらは後の文章でそれぞれ説明します.