python網(wǎng)絡(luò)編程

"""author = 陳俊龍"""

=============socket server=============

import socket

1.什么是socket

socket又叫套接字,指的是實(shí)現(xiàn)網(wǎng)絡(luò)通信的兩端

2.服務(wù)器套接字

1)創(chuàng)建套接字對象(買電話機(jī))(服務(wù)器端)

socket(self, family=AF_INET, type=SOCK_STREAM)

說明:

family -
設(shè)置ip類型,AF_INET - ipv4
type -
設(shè)置傳輸類型:SOCK_STREAM - TCP傳輸協(xié)議, SOCK_DGRAM - UDP傳輸協(xié)議

server = socket.socket()

2)綁定ip和端口(插電話線)

bind(adderss) - 綁定地址

說明:

adderss -
元組,(ip地址,端口)

ip地址 -
通過ip地址可以確認(rèn)互聯(lián)網(wǎng)中的唯一一臺計算機(jī)
運(yùn)行服務(wù)器程序的計算機(jī)的ip地址 112.193.57.163
端口 -
端口是用來區(qū)分同一臺計算機(jī)中的不同服務(wù)(數(shù)字)
范圍是065535,其中01024是著名端口(不能隨便用)

server.bind(('10.7.160.62', 8888))

3)設(shè)置最大監(jiān)聽數(shù): - 決定最多有多少客戶端同時連接服務(wù)器(找人來等電話)

server.listen(10)

4)讓服務(wù)器一直保持啟動狀態(tài)

5) 接收請求(相當(dāng)于接電話),返回建立的連接和客戶端地址

注意:當(dāng)代碼執(zhí)行到這里,程序會停下來直到有客戶端給當(dāng)前服務(wù)器發(fā)送請求為止

while True:
    print('開始監(jiān)聽...........')
    connection, addr = server.accept()
    print('++++++++++++++++++')
    print(addr)

6)接收客戶端發(fā)送的消息

對應(yīng)所建立的連接.recv(一次性能接收的最大值) - 返回值是接收到的數(shù)據(jù),數(shù)據(jù)類型是二進(jìn)制(bytes)

補(bǔ)充 :

二進(jìn)制數(shù)據(jù)和字符串的相互轉(zhuǎn)換
二進(jìn)制轉(zhuǎn)字符串:
str(二進(jìn)制數(shù)據(jù),encoding='utf8')
二進(jìn)制數(shù)據(jù).decode(encoding='utf8')

   re_data = connection.recv(1024)
   re_message = str(re_data, encoding='utf-8')
   # re_message = re_data.decode(encoding='utf8')
   print(re_message)

7)發(fā)送消息(說話)

send(發(fā)送數(shù)據(jù)) - 發(fā)送數(shù)據(jù)的類型是二進(jìn)制

補(bǔ)充:

字符串轉(zhuǎn)二進(jìn)制
bytes(字符串, encoding='utf8')
字符串.encode()

    send_data = bytes('你好嗎?', encoding='utf-8')
    # send_data = '你好嗎?'.encode()
    connection.send(send_data)

8)斷開連接(掛電話)

    connection.close()

==============sockt client===============

import socket

1.創(chuàng)建套接字對象(客戶端)

client = socket.socket()

2.連接服務(wù)器

connect((服務(wù)器ip,服務(wù)器端口)) - 元組

client.connect(('10.7.160.73', 8000))

3.發(fā)送消息

client.send('我是陳俊龍!'.encode())

4.接收消息

re_data = client.recv(1024)
print(re_data.decode(encoding='utf8'))

5.關(guān)閉連接

client.close()

===============持續(xù)通訊服務(wù)端===========

import socket

創(chuàng)建套接字對象

server = socket.socket()

綁定地址

server.bind(('10.7.160.62', 8888))

開始監(jiān)聽

server.listen(10)

保持服務(wù)器一直處在啟動狀態(tài)

while True:
    # 接收請求
    print('開始監(jiān)聽......')
    connection, address = server.accept()



    while True:
        # 接收消息

        re_data = connection.recv(1024)
        print(address, re_data.decode(encoding='utf8'))
        if re_data.decode(encoding='utf8') == '拜拜':
            connection.close()
            break

        # 發(fā)送消息
        message = input('請輸入:')
        connection.send(message.encode())

=============持續(xù)通信客戶端=============

import socket

client = socket.socket()
client.connect(('10.7.160.62', 8888))

while True:
    message = input('請輸入:')
    client.send(message.encode())
    if message == '拜拜':
        client.close()
        break

    re_data = client.recv(1024)
    print(re_data.decode(encoding='utf8'))
    if re_data.decode(encoding='utf8') == '拜拜':
        client.close()
        break
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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