1. 程式人生 > >python socket網絡編程

python socket網絡編程

cmp highlight pre 客戶端 網卡 microsoft -s 原始的 16px

計算機通過網卡通信,一臺計算機可以有多個網卡。

通信線路可傳遞各種類型的數據,遵循不同的通信協議。

socket:相當於通信雙方的端口。

機器上最多開放的端口數:65535.

建立連接需要IP地址和端口號。

每個機器有IP地址,有端口號,通信時找到IP地址,再找到具體的端口號,因為機器上可以同時運行很多程序,所以需要同時開放很多端口。

發送端偽代碼:

import socket
socket.TCP/IP
connect(server.ip,server.port)
socket.send(‘hello,world‘)

socket.recv()       #發送端也可以接收服務器傳來的數據
socket.close()        #關閉端口

服務器端偽代碼:

import socket
socket.TCP/IP
listen(0.0.0.0,1234)    #0.0.0.0是IP地址,一個服務器可以有多個IP地址,每個IP地址下有多個端口,接收數據時需要指定IP地址和端口
#0.0.0.0是指所有IP地址,1234是端口號
socket.waiting()       #等待數據傳來
socket.recv()     
send()      #服務器也可以發送數據

socket families(地址簇,網絡層):

socket.AF_UNIX  進程通過內存通信,不經過硬盤

socket.AF_INET  IPV4,網絡層

socket.AF_INET

6  IPV6

socket types(傳輸層):

socket.SOCK_STREAM  #for tcp協議

socket.SOCK_DGRAM  #for udp協議

socket.SOCK_RAW  #原始套接字,處理底層、原始的數據ICMP\IGMP等網絡報文;更改IP地址;

真代碼:

服務器端:

import socket
server=socket.socket()
server.bind((‘localhost‘,9696))
server.listen()
print(‘開始等待‘)
conn,addr=server.accept()    #返回兩個值,第一個是客戶端連過來而在服務器端為其生成的一個連接實例,第二個是地址

print(conn,addr)
print(‘電話來了‘)
data=conn.recv(1024)
print(‘receive:‘, data)
conn.send(data.upper())

server.close()

客戶端:

import socket
client=socket.socket()     #聲明socket類型,同時生成socket連接對象
client.connect((‘localhost‘,9696))

# client.send(b"hello,world.")   #只能以字節的格式發送,b代表byte,b只能轉換ACS碼,不能轉換中文
client.send("胖虎就是剛田武".encode(‘utf-8‘))   #中文轉換為bytes
data=client.recv(1024) print(‘recv:‘,data.decode())  #把bytes轉換為utf-8 client.close()

多次傳輸信息:

服務器端:

import socket
server=socket.socket()
server.bind((‘localhost‘,9696))
server.listen()
print(‘開始等待‘)
conn,addr=server.accept()    #返回兩個值,第一個是客戶端連過來而在服務器端為其生成的一個連接實例,第二個是地址
print(‘電話來了‘)
while True:
    data=conn.recv(1024)
    print(type(data))   #data是bytes類型
    print(type(data.decode()))      #data.decode()是str類型
    print(‘receive:‘,data.decode()) #收到的是bytes,需要decode()解碼成string
    conn.send(data.upper())
server.close()

客戶端:

import socket
client=socket.socket()     #聲明socket類型,同時生成socket連接對象
client.connect((‘localhost‘,9696))
# client.send(b"hello,world.")        #只能以字節的格式發送,b代表byte,b只能轉換ACS碼,不能轉換中文
# client.send("胖虎就是剛田武".encode(‘utf-8‘))  #中文轉換為bytes
while True:
    massage=input(‘輸入要發送的內容:‘).strip()
    client.send(massage.encode(‘utf-8‘))
    data=client.recv(1024)
    print(‘receive:‘,data.decode())
client.close()

python socket網絡編程