Python中的socket

 

socket()模塊函數用法

import
socket socket.socket(socket_family,socket_type,protocal=0) socket_family 能夠是 AF_UNIX 或 AF_INET。socket_type 能夠是 SOCK_STREAM 或 SOCK_DGRAM。protocol 通常不填,默認值爲 0。 獲取tcp/ip套接字 tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 獲取udp/ip套接字 udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 因爲 socket 模塊中有太多的屬性。咱們在這裏破例使用了'from module import *'語句。使用 'from socket import *',咱們就把 socket 模塊裏的全部屬性都帶到咱們的命名空間裏了,這樣能 大幅減短咱們的代碼。 例如tcpSock = socket(AF_INET, SOCK_STREAM)

 

 

socket通訊流程與打電話流程相似,咱們就以打電話爲例來實現一個low版的套接字通訊

服務端:socket

import socket

#一、買手機
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #tcp稱爲流式協議,udp稱爲數據報協議SOCK_DGRAM
# print(phone)

#二、插入/綁定手機卡
# phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
phone.bind(('127.0.0.1',8082))

#三、開機
phone.listen(5) # 半鏈接池,限制的是請求數

#四、等待電話鏈接
print('start....')
conn,client_addr=phone.accept() #(三次握手創建的雙向鏈接,(客戶端的ip,端口))
# print(conn)
print(client_addr)

#五、通訊:收\發消息
while True: # 通訊循環
    data=conn.recv(1024) #最大接收的字節數
    print('來自客戶端的數據',data)
    conn.send(data.upper())

#六、掛掉電話鏈接
conn.close()

#七、關機
phone.close()

客戶端:tcp

import socket

#一、買手機
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print(phone)
#二、撥電話
phone.connect(('127.0.0.1',8082)) # 指定服務端ip和端口

#三、通訊:發\收消息
while True:
    msg=input('>>>:').strip()
    phone.send(msg.encode('utf-8'))
    # phone.send(bytes('hello',encoding='utf-8'))
    data=phone.recv(1024)
    print(data)

#四、關閉
phone.close()
相關文章
相關標籤/搜索