day18-網(wǎng)絡(luò)編程基礎(chǔ)

一.套接字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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容