python socketネットワークインタフェースプログラミング
2193 ワード
pythonは、TCP/UDP処理のためにsocketモジュールを呼び出すことができる.socketは、Unixスレッドで処理されるsocketと、TCP/IPプロトコルが上位層に提供される処理インタフェースとの異なるタイプを選択することができる.TCP/UDPは、いずれもsocketインタフェースを介して対応するsocketオブジェクトを確立し、インタフェースパラメータ処理タイプにSOCK_があることを示すDGRAMとSOCK_STREAMの違いは,UDPは無接続であり,TCPは接続向けであるため,処理中に若干の違いがあり,TCP処理時にはlistenインタフェースを介してTCPの握手過程の発生を傍受する必要がある.
UDPサーバおよびクライアントプログラムの例
サービスエンドプログラム
クライアントプログラム
TCPサービスおよびクライアントプログラムの例
サーバエンドプログラム
クライアントプログラム
UDPサーバおよびクライアントプログラムの例
サービスエンドプログラム
#!/usr/bin/python3.6
import socket
BUFFER_SIZE = 1024
TARGET_ADDR = '' #
TARGET_PORT = 60000
TARGET = (TARGET_ADDR,TARGET_PORT)
#AF_INET socket、SOCK_DGRAM UDP
ss = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
ss.bind(TARGET) # IP
while True:
data,addrRsv = ss.recvfrom(BUFFER_SIZE)
if not data:
sys.exit(0)
else:
print(data)
ss.close()
クライアントプログラム
#!/usr/bin/python3.6
import socket
ss = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
BUFFER_SIZE = 1024
TARGET_ADDR = 'IP address'
TARGET_PORT = 60000
TARGET = (TARGET_ADDR,TARGET_PORT)
while True:
aa = input('> ') #
if not aa:
break
# , IP
ss.sendto(bytes(aa,'utf-8'),TARGET)
data,addrRsv = ss.recvfrom(BUFFER_SIZE)
if not data:
break
else:
print(data)
print(addrRsv)
ss.close()
TCPサービスおよびクライアントプログラムの例
サーバエンドプログラム
#!/usr/bin/python3.6
from socket import *
BUFFERSIZE = 1024
#SOCK_STREAM TCP
s = socket(AF_INET, SOCK_STREAM) # Create TCP socket
s.bind(("",60000)) # Bind to port 60000
s.listen() # Start listening
while 1:
client,addr = s.accept() # Wait for a connection
print("Got a connection from ", addr)
client.send(b'connect successfully')
aa = client.recv(BUFFERSIZE)
print(aa)
client.close()
クライアントプログラム
#!/usr/bin/python3.6
from socket import *
BUFFERSIZE = 1024
ss = socket(AF_INET,SOCK_STREAM) # Create TCP socket
ss.connect(("IP address",60000)) # Connect to the server
tmp = ss.recv(BUFFERSIZE) # Receive up to 1024 bytes
print(tmp)
ss.send(b"feedback")
ss.close() # Close connection