1. 程式人生 > >Python的TCP編程

Python的TCP編程

str 發送數據 pre sta tin http tcp threading 服務器

目錄

  • 前言
  • server.py
  • client.py
  • 測試

前言

  • 操作系統win10
  • 時間2019年02月
  • Python版本: Python 3.5.2
  • 參考網址1--廖雪峰PythonTCP編程

server.py

# -*- coding: utf-8 -*-
import socket
import threading
import time


# 每個連接都必須創建新線程(或進程)來處理,否則,
# 單線程在處理連接的過程中,無法接受其他客戶端的連接
def tcplink(sock, addr):
    print(‘Accept new connection from %s:%s...‘ % addr)
    sock.send((‘Welcome!‘).encode(‘utf-8‘))
    while True:
        data = sock.recv(1024)
        time.sleep(1)
        if not data or data.decode(‘utf-8‘) == ‘exit‘:
            break
        sock.send((‘Hello, client user %s.‘ %
                   data.decode(‘utf-8‘)).encode(‘utf-8‘))
    sock.close()
    print(‘Connection from %s:%s closed.‘ % addr)


# 創建一個socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 監聽端口
s.bind((‘127.0.0.1‘, 8080))
# 配置等待連接的最大數量
s.listen(5)
print(‘Waiting for connection...‘)

while True:
    # 接受一個新連接(等待並返回一個客戶端的連接)
    sock, addr = s.accept()
    # 創建新線程來處理TCP連接
    t = threading.Thread(target=tcplink, args=(sock, addr))
    t.start()

client.py

# -*- coding: utf-8 -*-
import socket
import threading
import time

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立連接
s.connect((‘127.0.0.1‘, 8080))
# 接收歡迎消息
print(s.recv(1024).decode(‘utf-8‘))
# 發送數據
for data in [(‘aaa‘).encode(‘utf-8‘), (‘bbb‘).encode(‘utf-8‘)]:
    s.send(data)
    print(s.recv(1024).decode(‘utf-8‘))
s.send((‘exit‘).encode(‘utf-8‘))
s.close()

測試

啟動服務端

python server.py

啟動客戶端

python client.py

註意:客戶端程序運行完畢就退出了,而服務器程序會永遠運行下去,必須按Ctrl+C退出程序

Python的TCP編程