1. 程式人生 > >(一)socket筆記

(一)socket筆記

socket(套接字)
發資料
1.流程:建立套接字----->使用套接字收/發資料------>關閉
2. 建立一個tcp socket

import socket
#建立套接字
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)         #stream 流,小河,流播
#使用套接字....

#關閉套接字
s.close()

3.建立一個udp socket

import  socket

s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)         #dgram離散可控性,可觀性

s.close()

4.建立socket說明
在python中使用socket模組的函式就可以完成
socket.socket(引數1,引數2)
引數1:
可以選擇AF_INET(用於internet程序間通訊),或者AF_UNIX(用於同一臺機器程序間通訊)
引數2:
套接字型別:可以是SOCK_STREAM(流式套接字,主要用於tcp)或者是SOCK_DGGRAN(資料報套接字)
5.例項:

import socket
def main():
    s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    s.bind(('xx.x.x.x'),7788)  #繫結ip和埠號
    s.sendto(b'haha',('x.x.x.x',6666))   #兩個引數。第一個是位元組型的傳送內容,第二個為元組型,包括目的ip和埠號
 ''' 
 或者
    send_data=input('請輸入資料:')
    s.sendto(send_data.encode('utf-8'),('xx.x.x.x.',6666))
'''
    s.close()
if __name__ == '__main__':
    main()

網路除錯助手顯示:
在這裡插入圖片描述
收資料

def recive_udp():
    #建立聯結器
    udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    #繫結本地的相關資訊,如果不穩定會隨機分配
    local_adr=("xx.xx.xx.xx",7788) #ip地址和埠號 ,ip一般不用寫,表示本機ip
    udp_socket.bind(local_adr)     #傳入的是元組
    #等待接受對方傳送的資料
    recv_data=udp_socket.recvfrom(1024)  #表示本次接受的最大位元組數
    #列印
    print(recv_data[0].decode('gbk'))
    #關閉
    udp_socket.close()

案列

import socket
def main():
    udp_sockrt=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)  #udp
    udp_sockrt.bind(('x.x.x.x',7788))
    desc_ip=input('請輸入目的ip:')
    desc_port=input('輸入目的埠:')
    send_mes=input('傳送內容:')
    #傳送
    udp_sockrt.sendto(send_mes.encode('utf-8'),(desc_ip,int(desc_port)))

    #接受
    rec_data=udp_sockrt.recvfrom(1024)

    print(rec_data[0].decode('gbk'))  #顯示

    udp_sockrt.close()

if __name__ == '__main__':
    main()

單工:資料傳輸是單向的。通訊雙方中,一方固定為傳送端,一方則固定為接收端(收音機)
半雙工:半雙工資料傳輸允許資料在兩個方向上傳輸,但是,在某一時刻,只允許資料在一個方向上傳輸,它實際上是一種切換方向的單工通訊;在同一時間只可以有一方接受或傳送資訊,可以實現雙向通訊。舉例:對講機。
全工:全雙工資料通訊允許資料同時在兩個方向上傳輸,因此,全雙工通訊是兩個單工通訊方式的結合,它要求傳送裝置和接收裝置都有獨立的接收和傳送能力;在同一時間可以同時接受和傳送資訊,實現雙向通訊,舉例:電話通訊。
UDP建立