socket: 對所有上層協議(tcp/ip,udp等)的底層封裝。
網路上的兩個程式通過乙個雙向的通訊連線實現資料的交換,這個連線的一端稱為乙個socket。
建立網路通訊連線至少要一對埠號(socket)。
協議型別又叫位址簇
socket例項,分別寫在兩個.py裡面,客戶端發出去的內容是小寫的,接收到的內容是大寫的。
執行的時候,先執行server,再執行client端。
#伺服器端import socket
server=socket.socket()
server.bind(('localhost',6969)) #繫結要監聽哪個ip位址和埠
server.listen() #開始監聽
print("我要開始等**了")
conn,addr=server.accept() #每進來乙個鏈結,伺服器端都會為那個鏈結生成乙個例項。阻塞
print(conn,addr) #就是客戶端連過來而在伺服器端為其生成的乙個連線例項。
print("**來了")
data=conn.recv(1024) #從客戶端接收資料的大小。最大8192.如果客戶端沒有傳回來資料,則會一直阻塞到這裡。
print("recv:",data)
conn.send(data.upper())
server.close()
客戶端一斷開,conn.recv收到的就都是空資料了,就會陷入死迴圈。
#客戶端
#(發出去的內容是小寫的,收到的回應是大寫的。)
import socket client=socket.socket() #宣告socket型別,同時生成socket連線物件;定義位址簇和協議型別(預設ipv4和tcp/ip) client.connect(("localhost",6969)) #連線本機的6969埠 client.send(b"hello server, i am client") data=client.recv(1024) #1024個位元組,接受伺服器端的返回 print("recv:",data) client.close()
伺服器端的執行結果:
我要開始等**了('127.0.0.1', 50703)
**來了
recv: b'hello server, i am client'
客戶端的執行結果:
recv: b'hello server, i am client'
2.所有的來往資料必須是byte型別的。
#伺服器端import socket
server=socket.socket()
server.bind(('localhost',6969)) #繫結要監聽的埠
server.listen() #監聽
print("我要開始等**了")
conn,addr=server.accept()
print(conn,addr) #就是客戶端連過來而在伺服器端為其生成的乙個連線例項。
print("**來了")
data=conn.recv(1024)
print("recv:",data)
conn.send("我是伺服器端來的確認資訊".encode("utf-8"))
#conn.send(data.upper())
server.close()
#客戶端(發出去的內容是小寫的,收到的回應是大寫的。)import socket
client=socket.socket()
#宣告socket型別,同時生成socket連線物件;定義位址簇和協議型別(預設ipv4和tcp/ip)
client.connect(("localhost",6969)) #連線本機的6969埠
data=client.recv(1024) #1024個位元組,接受伺服器端的返回
print("recv:",data.decode())
client.close()
Socket網路程式設計(1)
傳輸層 transport 傳輸層包括 udp 和 tcp,udp 幾乎不對報文進行檢查,而 tcp 提供傳輸保證。網路層 network 網路層協議由一系列協議組成,包括 icmp igmp rip ospf ip v4,v6 等。鏈路層 link 又稱為物理資料網路介面層,負責報文傳輸。按埠號可...
1 Socket網路程式設計
1.借助伺服器實現小寫轉大寫的程式 客戶端 傳送任意小寫字母到伺服器端。伺服器端 接收小寫字母,轉為大寫,回傳給客戶端,然後客戶端顯示到螢幕。結構體struct sockaddr in的標頭檔案 include toupper 函式標頭檔案 define serv ip 127.0.0.1 ip位址...
Socket程式設計例項
struct sockaddr sockaddr定義的標頭檔案 sys socket.h struct sockaddr in sockaddr in解決了sockaddr 的缺陷,實際上相當於把sockaddr 中的sa data分成了3個部分 sockaddr in 定義的標頭檔案 netine...