python 學習-- TCP程式設計

xiaopengyaonixi發表於2016-10-27

直接上程式碼:

服務端:

import socket
import threading,time

s =socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 繫結ip和埠
s.bind(('127.0.0.1',9999))

# 定義最大連線數
s.listen(5)
print('等待連線...')

# 定義子執行緒處理的方法
def tcplink(sock,addr):
    print('Accept new connection from %s:%s...' % addr)
    sock.send(b'Welcome!')
    # 接收來自客戶端的訊息
    while True:
        data = sock.recv(1024)
        time.sleep(1)
        if not data or data.decode('utf-8')=='exit':
            break
        sock.send(('Hello,%s!' % data.decode('utf-8')).encode('utf-8'))
    sock.close()
    print('Connection from %s:%s closed.' % addr)

# 定義一個迴圈等待客戶端的連線
while True:
    sock,addr = s.accept() # 執行緒阻塞等待連線
    # 建立新的執行緒來處理TCP資料
    t = threading.Thread(target=tcplink,args=(sock,addr))
    t.start() # 開啟子執行緒


執行結果:

客戶端:

import  socket

# 建立socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# socket連線
s.connect(('127.0.0.1',9999))

# 列印連線之後接收到的訊息
print(s.recv(1024).decode('utf-8'))

# 遍歷傳送訊息
for data in [b'Michael',b'Tracy',b'Sarah']:
    s.send(data)
    print(s.recv(1024).decode('utf-8'))

# 傳送exit
s.send(b'exit')

# 關閉socket
s.close()

執行結果:

服務端,關閉建立的socket,繼續監聽。。。



執行程式碼圖解:


相關文章