01-服務(wù)端套接字
套接字又叫套接字蝌诡,指的是實(shí)現(xiàn)通信的兩個(gè)端。等待請(qǐng)求的一段叫服務(wù)端套接字讨韭,發(fā)送請(qǐng)求的叫客戶端套接字
python中提供了socket模塊來(lái)支持socket編程
import socket
# ================服務(wù)器套接字=================
#1. 創(chuàng)建套接字對(duì)象
"""
socket(family,type)
family - 設(shè)置ip類型 AF_INET ipv4 AF_INET6 - ipv6
type - 設(shè)置傳輸類型 - SOCK_STREAM - tcp
"""
# 創(chuàng)建一個(gè)基于ipv4個(gè)TCP的套接字對(duì)象
server = socket.socket()
# 2.綁定ip地址和端口
"""
bind((ip地址结闸,端口號(hào)))
ip地址 - 服務(wù)器對(duì)應(yīng)的計(jì)算機(jī)的ip地址嫁蛇,字符串
端口號(hào) - 區(qū)分計(jì)算機(jī)上不同的服務(wù),是一個(gè)數(shù)字课幕,范圍是0 到 65535厦坛,
但是其中1024以下的是著名端口用來(lái)表示一些特殊的服務(wù),一般不用
同一時(shí)間一個(gè)端口只能對(duì)應(yīng)一個(gè)服務(wù)
"""
server.bind(('10.7.187.86',8082))
# 3.開始監(jiān)聽
"""
listen(最大監(jiān)聽數(shù))
最大監(jiān)聽數(shù) - 用來(lái)設(shè)置當(dāng)前服務(wù)器一次可以處理多少個(gè)請(qǐng)求
"""
server.listen(100)
print('開始監(jiān)聽')
# 4.讓一個(gè)服務(wù)器一直處于啟動(dòng)狀態(tài)
while True:
# 接受客戶端發(fā)送的請(qǐng)求乍惊,返回建立的會(huì)話和客戶端地址杜秸,注意:這段代碼會(huì)阻塞線程(程序運(yùn)行到這會(huì)停下來(lái),直到有客戶端給當(dāng)前服務(wù)器發(fā)送請(qǐng)求為止)
conversation,addr = server.accept()
print('接收到請(qǐng)求:',addr)
#6.接受消息(客戶端發(fā)送給服務(wù)器的消息)
"""
recv(緩存大小)
緩存大小 - 決定一次可以接受的數(shù)據(jù)的最大字節(jié)數(shù)
"""
# 這兒也會(huì)阻塞線程润绎,直到客戶端發(fā)送了消息才會(huì)接著執(zhí)行
re_data = conversation.recv(1024)
print(re_data.decode('utf-8'))
# 7.發(fā)送數(shù)據(jù)(服務(wù)器給客戶端發(fā)送數(shù)據(jù))
"""
send(數(shù)據(jù)) - 將指定的數(shù)據(jù)發(fā)送給客戶端
數(shù)據(jù) - 要求是二進(jìn)制
字符串轉(zhuǎn)二進(jìn)制:
a.bytes(字符串撬碟,'utf-8')
b.字符串.encode('utf-8')
二進(jìn)制轉(zhuǎn)字符串
a.str(二進(jìn)制數(shù)據(jù),'utf-8')
b.二進(jìn)制.decode('utf-8')
"""
message = input('>>')
conversation.send(message.encode(encoding='utf-8'))
if message == 'end':
conversation.close()
else:
continue
02 - 客戶端套接字
import socket
1.創(chuàng)建套接字對(duì)象
client = socket.socket()
2.請(qǐng)求連接服務(wù)器
connect((ip,端口))
client.connect(('10.7.187.86',8082))
# 3.發(fā)送消息
while True:
message = input('>>')
client.send(message.encode('utf-8'))
# 4.接收消息
re_data = client.recv(1024)
print(re_data.decode('utf-8'))