python socket網絡編程
阿新 • • 發佈:2018-10-16
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網絡編程