Sockte是計算機之間進行網絡通信的一套程序接口,相當于在發送端和接收端之間建立一個通信管道。在實際應用中,一些遠程管理軟件和網絡安全軟件大多數依賴于Socket來實現特定功能,由于TCP方式在網絡編程中應用非常頻繁,此處將對TCP編程進行講解
編寫TCP時一般會用到Socket模塊,其方法主要包括:
- connect(address):連接遠程計算機
- send(bytes[,flags]):發送數據
- recv(bufsize[,flags]):接收數據
- bind(address):綁定地址
- listen(backlog):開始監聽,等待客戶端連接
- accept():響應客戶端的一個請求,接收一個連接
使用TCP進行通信,首先需要在客戶端和服務端建立連接,并且要在通信結束后關閉連接以釋放資源。由于TCP是面向連接的,因此相對于UDP提供更高的可靠性。下面展示如何通過TCP進行通信
例如,設計一個對話系統“小艾”,該應用分為兩部分,一部分為服務端,一部分為客戶端。客戶端發送請求,服務端返回應答消息,兩部分代碼如下:
服務器段
#! /usr/bin/python
#coding:utf-8
#服務器段
import socket
language = {'what is your name':'I am Tom','how old are you':'25','bye':'bye!'}
host = '127.0.0.1'
port = 6666
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))
s.listen(1)
print("listening at port 6666")
conn,addr = s.accept()
print('Connect by:',addr)
while True:data = conn.recv(1024)data = data.decode()if not data:breakprint('Received message:',data)conn.sendall(language.get(data,'Nothing').encode())
conn.close()
s.close()
客戶端程序
#coding:utf-8
import socket,sys
host = '127.0.0.1'
port = 6666s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:s.connect((host,port))
except Exception as e:print('Server not found!')sys.exit()while True:c = input('YOU SAY:')s.sendall(c.encode())data = s.recv(1024)data = data.decode()print('Received:',data)if c.lower() == '再見':breaks.close()
運行結果