網(wǎng)絡(luò)編程
import socket
一.套接字Server
1.什么是socket編程
socket又叫套接字银锻,指的是實(shí)現(xiàn)通信的兩個(gè)端肉瓦;這兩個(gè)端又分為服務(wù)器套接字和客戶端套接字遭京。
2.服務(wù)器套接字
python中提供了一個(gè)socket模塊來支持socket編程
# 1)創(chuàng)建套接字對象
# 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(('127.0.0.1',8888))
# 3)等待連接并且設(shè)置同一時(shí)間能夠接收的請求數(shù)量
server.listen(512)
# 4)讓服務(wù)器保持一直運(yùn)行的狀態(tài)
while True:
print('開始監(jiān)聽')
# 5)接收請求
# 當(dāng)程序執(zhí)行到accept()的時(shí)候饮寞,會停下來直到有客戶端給當(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)字符串
# a.二進(jìn)制對象.decode()
# b.str(二進(jìn)制對象, encoding='utf_8')
recv_data = connect.recv(1024)
print('接收:',recv_data.decode(encoding='utf_8'))
# 7)給客服端發(fā)送數(shù)據(jù)
# send(數(shù)據(jù)) - 發(fā)送數(shù)據(jù),數(shù)據(jù)的類型必須是bytes
connect.send(('HTTP/1.1 200 OK\r\n\r\n'+input('請輸入:')).encode())
# 8)關(guān)閉連接
connect.close()
二.套接字Client
# 1.創(chuàng)建套接字對象
client = socket.socket()
# 2.發(fā)送請求
# connect((ip地址, 端口號))
client.connect(('127.0.0.1',8888))
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()
from socket import *
三.圖片Server
client = socket()
client.connect(('10.7.181.120',8888))
while True:
re_data = client.recv(1024)
with open('files\\nn1.jpg', 'ab') as f:
f.write(re_data)
if(len(re_data) < 1024):
break
四.圖片Client
client = socket()
client.connect(('10.7.181.120',8888))
while True:
re_data = client.recv(1024)
with open('files\\nn1.jpg', 'ab') as f:
f.write(re_data)
if(len(re_data) < 1024):
break