一.套接字Server
1.什么是socket編程
socket又叫套接字,指實(shí)現(xiàn)通信的兩個(gè)端,分為服務(wù)器套接字和客戶端套接字
2.服務(wù)器套接字
python中提供了一個(gè)socket模塊來支持socket編程
1)創(chuàng)建套接字對(duì)象
server = socket(family=AF_INET, type=SOCK_STREAM)
family - 設(shè)置ip類型(ipv4:AF_INET, ipv6:AF_INET6)
type - 設(shè)置數(shù)據(jù)的傳輸方式(TCP:SOCK_STREAM, UDP:SOCK_DGRAM)
2)綁定ip和端口(插電話線)
bind((ip地址, 端口號(hào)))
ip地址 - 字符串;服務(wù)器程序運(yùn)行的計(jì)算機(jī)ip地址
端口號(hào) - 整型;范圍:(0-65535),其中0-1024是著名端口,一般不隨便使用
3)等待連接,同時(shí)設(shè)置服務(wù)器同一時(shí)間能夠接受的請(qǐng)求數(shù)量
server.listen(1024)
4)讓服務(wù)器保持一致運(yùn)行的狀態(tài)
while True:
5)接收請(qǐng)求
connection, address = server.accept()
6)接收客戶端發(fā)送的數(shù)據(jù)
recv_data = connection.recv(數(shù)據(jù)大小) - 接收數(shù)據(jù)并且設(shè)置一次性能夠接收最大數(shù)據(jù)
補(bǔ)充:
字符串轉(zhuǎn)二進(jìn)制:字符串.encode()、二進(jìn)制對(duì)象.bytes()
二進(jìn)制轉(zhuǎn)字符串:二進(jìn)制對(duì)象.decode(encoding='utf-8')、str(二進(jìn)制對(duì)象, encoding='utf-8')
7)給客戶端發(fā)送消息
content = input('請(qǐng)輸入:')
send_meg = 'HTTP/1.1 200 OK\r\n\r\n' + content
connection.send(send_meg.encode())
# code
from socket import *
server = socket()
server.bind(('10.7.181.87', 1314))
server.listen(1024)
while True:
print('開始監(jiān)聽')
connection, address = server.accept()
print('接收到請(qǐng)求')
while True:
recv_data = connection.recv(1024)
meg = str(recv_data, encoding='utf-8')
print(meg)
content = input('請(qǐng)輸入:')
send_meg = 'HTTP/1.1 200 OK\r\n\r\n' + content
connection.send(send_meg.encode())
if content == 'exit()' or meg == 'exit()':
server.close()
二.套接字Client
1.創(chuàng)建套接字對(duì)象
client = socket()
2.發(fā)送請(qǐng)求
client.connect((ip地址, 端口號(hào)))
3.發(fā)送消息
content = input('請(qǐng)輸入內(nèi)容:')
client.send(content.encode())
4.接收消息
re_data = client.recv(1024)
print(re_data.decode(encoding='uft-8'))
5.關(guān)閉對(duì)話
client.close()
# code
from socket import *
client = socket()
ip = input('請(qǐng)輸入ip地址:')
port = int(input("請(qǐng)輸入端口:"))
client.connect((ip, port))
while True:
content = input('請(qǐng)輸入內(nèi)容:')
client.send(content.encode())
re_data = client.recv(1024)
meg = re_data.decode(encoding='utf-8')
print(meg)
if content == 'exit()' or meg == 'exit()':
client.close()
三.圖片服務(wù)器及接收客戶端
# 服務(wù)器
from socket import *
server = socket()
server.bind(('10.7.181.87', 3344))
server.listen(1024)
while True:
print('開始監(jiān)聽')
connection, address = server.accept()
with open(r'C:\Users\longe\Desktop\1.jpg', 'rb') as f:
connection.send(f.read())
print('發(fā)送完成')
# 客戶端
from socket import *
client = socket()
client.connect(('10.7.181.87', 3344))
while True:
recv_content = client.recv(1024)
with open('picture.jpg', 'ab') as f:
f.write(recv_content)
if len(recv_content) < 1024:
break