import socket
1.什么是socket編程
socket又叫套接字, 指的是實(shí)現(xiàn)通信的兩個端桅打;這個兩個端又分為服務(wù)器套接字和客戶端套接字
2.服務(wù)器套接字
python中提供了一個socket模塊來支持socket編程
1) 創(chuàng)建套接字對象(買電話機(jī))
socket(family=AF_INET, type=SOCK_STREAM)
family - 設(shè)置ip類型; AF_INET - ipv4, AF_INET6 - ipv6
type - 設(shè)置數(shù)據(jù)的傳輸方式; SOCK_STREAM - TCP, SOCK_DGRAM - UDP
server = socket.socket()
2) 綁定ip和端口(插電話線)
bind((ip地址, 端口號))
ip地址 - 字符串; 服務(wù)器程序運(yùn)行在哪臺計(jì)算機(jī)上,ip地址就寫哪臺計(jì)算機(jī)的ip
端口號 - 整型燕雁;范圍是0~65535,其中0~1024是著名端口登夫,有自己特殊的意義一般不隨便用。
server.bind(('10.7.181.109', 8882))
3) 等待連接并且設(shè)置同一時間能夠接收的請求數(shù)量
server.listen(512)
4) 讓服務(wù)器保持一致運(yùn)行的狀態(tài)
while True:
print('開始監(jiān)聽')
5) 接收請求(接電話)
注意: 當(dāng)程序執(zhí)行到accept()的時候春霍,會停下來直到有客戶端給當(dāng)前服務(wù)器發(fā)送請求為止
connect, address = server.accept()
print('接收到請求')
print(connect, address)
保持通話
while True:
6) 接收客戶端發(fā)送的數(shù)據(jù)(聽別人講電話)
recv(數(shù)據(jù)大小) - 接收數(shù)據(jù)并且設(shè)置一次性能夠接收最大數(shù)據(jù)
補(bǔ)充: 二進(jìn)制轉(zhuǎn)字符串
二進(jìn)制對象.decode(encoding='utf-8')
str(二進(jìn)制對象, encoding='utf-8')
recv_data = connect.recv(1024)
# print('接收:', recv_data.decode(encoding='utf-8'))
print('接收:', str(recv_data, encoding='utf-8'))
7) 給客戶端發(fā)送數(shù)據(jù)(說話別人聽)
send(數(shù)據(jù)) - 發(fā)送數(shù)據(jù),數(shù)據(jù)的類型必須是bytes
發(fā)送一個網(wǎng)頁數(shù)據(jù)
with open('test.html', encoding='utf-8') as f:
# # html = f.read()
# # message = 'HTTP/1.1 200 OK\r\n\r\n'+html
# # connect.send(message.encode())
send_message = input('服務(wù)器:')
connect.send(send_message.encode())
# 8) 關(guān)閉連接(掛電話)
connect.close()
==================================================================
import socket
1.創(chuàng)建套接字對象(買電話機(jī))
client = socket.socket()
2.發(fā)送請求(打電話)
connect((ip地址, 端口號))
client.connect(('10.7.181.109', 8882))
while True:
3.發(fā)送消息
send_message = input('客戶端:')
client.send(send_message.encode())
4.接收消息
re_data = client.recv(1024)
print(re_data.decode(encoding='utf-8'))
client.close()
=============================================================
import socket
1.創(chuàng)建套接字對象(買電話機(jī))
client = socket.socket()
2.發(fā)送請求(打電話)
"""
connect((ip地址, 端口號))
"""
client.connect(('10.7.181.109', 8882))
while True:
# 3.發(fā)送消息
send_message = input('客戶端:')
client.send(send_message.encode())
# 4.接收消息
re_data = client.recv(1024)
print(re_data.decode(encoding='utf-8'))
client.close()
==================================================================
服務(wù)器
from socket import *
server = socket()
server.bind(('10.7.181.86', 6667))
server.listen(521)
while True:
print('開始監(jiān)聽')
connect,address = server.accept()
print(address)
with open('貓.jpg', 'rb') as f:
connect.send(f.read())
客戶端
from socket import *
client = socket()
client.connect(('10.7.181.86', 6667))
while True:
re_data = client.recv(1024)
with open('new.jpg', 'ab')as f:
f.write(re_data)
if(len(re_data) < 1024):
break