本文做簡單理解之用,專業(yè)內(nèi)容需要專業(yè)書籍獲取舍哄。
socket編程主要實(shí)現(xiàn)網(wǎng)絡(luò)通信之用宴凉,我們在上網(wǎng)的時候,向別人發(fā)送一個消息表悬,主要經(jīng)歷三個過程:
1.你好弥锄,我想認(rèn)識你,美女/帥哥(打招呼)
2.可以(獲得同意)
3.你的聯(lián)系方式是(發(fā)送的內(nèi)容)
python在進(jìn)行socket編程的時候蟆沫,也是這么一個過程籽暇,本例也正好利用常見的發(fā)消息舉個例子。這里主要用到的一個類庫是饥追,socket图仓。以服務(wù)端為例
serve.py
import socket
sk=socket.socket()
address=('127.0.0.1',8000)
sk.bind(address)
sk.listen()
while True:
print('等待客戶端鏈接' + '.' * 20)
connect, client = sk.accept()
print(str(client)+'上線')
while True:
try:
inp = input('>>>請輸入:')
connect.send(bytes(inp, 'utf8'))
data = connect.recv(1024)
if not data:break
print(str(data, 'utf8'))
except ConnectionResetError:
print('-'*10+'對方離線'+'-'*10)
break
sk.close()
1.創(chuàng)建一個socket對象
sk=socket.socket()
2.綁定IP地址和端口address=('127.0.0.1',8000)
3.監(jiān)聽這個端口sk.bind(address)
4.等待客戶端鏈接connect, client = sk.accept()
5.發(fā)送內(nèi)容或者接收內(nèi)容connect.send(bytes(inp, 'utf8'))
1,2但绕,3步都是為打招呼做準(zhǔn)備,4步等待客戶端介入惶看,并且獲取同意捏顺,5步發(fā)送內(nèi)容
在客戶端俩垃,只需要請求鏈接服務(wù)端咱士,而服務(wù)端會監(jiān)聽到端口會同意阱州。
client.py
import socket
sk=socket.socket()
try:
sk.connect(('127.0.0.1',8000))
except ConnectionRefusedError:
print('-'*10+'服務(wù)器未上線砾医,或者不存在'+'-'*10)
exit()
while True:
try:
data = sk.recv(1024)
except ConnectionResetError:
print('-'*10+'服務(wù)器歇菜了'+'-'*10)
break
print(str(data, 'utf8'))
inp = input('>>>請輸入:')
if inp =='exit':
break
sk.send(bytes(inp, 'utf8'))
sk.close()
sk.connect(('127.0.0.1',8000))
為鏈接服務(wù)段的請求成肘。
代碼演示如下:
image.png
3.發(fā)送內(nèi)容纱耻,客戶端就收到了匪傍,此時客戶端也可以回復(fù)服務(wù)端的響應(yīng)