一、udp編程
1.客戶端client:發(fā)起訪問的一方。
2.服務(wù)器端
3.server段編程
(1)建立socket,socket是負(fù)責(zé)具體通信的一個實例
(2)綁定,為創(chuàng)建的socket指派固定的端口和ip地址
(3)接受對方發(fā)送內(nèi)容
(4)給對方發(fā)送反饋,此步驟為非必須步驟
4.client端編程
(1)建立通信的socket
(2)發(fā)送內(nèi)容到指定服務(wù)器
(3)接受服務(wù)器給定的反饋內(nèi)容
5.模擬一下這個過程
(1)我們先建立一個服務(wù)器的函數(shù)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
#服務(wù)器案例 import socket ? #模擬服務(wù)器的函數(shù) def serverfunc(): #1.建立socket #socket.af_inet:使用ipv4協(xié)議族 #socket.sock_dgram:使用udp通信 sock = socket.socket(socket.af_inet,socket.sock_dgram) #2.綁定ip和port ? #127.0.01:這個ip地址代表的是機器本身 #7852:隨機指定的端口號 #地址是一個tuple類型,(ip.port) addr = ( "127.0.0.1" , 7852 ) sock.bind(addr) ? #接受對方消息 #等待方式為死等,沒有其他可能性 #recvfrom接受的返回值是一個元組,前一項表示數(shù)據(jù),后一項表示地址 #參數(shù)的含義是緩沖區(qū)大小 #rst = sock.recvfrom(500) data,addr = sock.recvfrom( 500 ) ? print (data) print ( type (data)) ? #發(fā)送過來的數(shù)據(jù)是bytes格式,必須通過解碼才能得到str格式內(nèi)容 #decode默認(rèn)參數(shù)是utf8 text = data.decode() print ( type (text)) print (text) ? #給對方反饋的消息 rsp = "i am very hungry now" ? #發(fā)送的數(shù)據(jù)需要編程成bytes格式 #默認(rèn)時utf8 data = rsp.encode() sock.sendto(data,addr) if __name__ = = "__main__" : print ( "start server" ) serverfunc() print ( "end server" ) |
(2)然后創(chuàng)建一個客戶端的函數(shù)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
import socket def clientfunc(): sock = socket.socket(socket.af_inet,socket.sock_dgram) text = "you are very cool" ? #發(fā)送的數(shù)據(jù)必須是bytes格式 data = text.encode() #發(fā)送 sock.sendto(data,( "127.0.0.1" , 7852 )) data,addr = sock.recvfrom( 200 ) ? data = data.decode() print (text) ? if __name__ = = "__main__" : print ( "start client" ) clientfunc() print ( "end client" ) |
(3)我們先啟動服務(wù)器端函數(shù)
出現(xiàn)如下圖像,它是創(chuàng)建了一個sock,然后自己綁定到127.0.0.1:7852,運行到sock.recvfrom(500)這里死等客戶端發(fā)消息
(4)再啟動客戶端函數(shù)
出現(xiàn)如下發(fā)送編碼后的?text內(nèi)容到服務(wù)器(127.0.0.1:7852),服務(wù)器成功接收后返回you are cool這句話。
(5)我們再看服務(wù)器的函數(shù)那里
接受了bytes格式的字符串,并打印出來了,然后再解碼打印出來,最后把you are cool返回?客戶端。
(6)這里有個地方?jīng)]有辦法:因為我們在一臺電腦上做的測試,所以相當(dāng)于自言自語,?不如在兩臺電腦上進行試驗。?
二、源碼
d33_1_serverprogramme.py
d33_2_clientprogramme.py
https://github.com/ruigege66/python_learning/blob/master/d33_1_serverprogramme.py
https://github.com/ruigege66/python_learning/blob/master/d33_2_clientprogramme.py
以上就是python socket編程基礎(chǔ)入門的詳細(xì)內(nèi)容,更多關(guān)于python socket編程的資料請關(guān)注服務(wù)器之家其它相關(guān)文章!
原文鏈接:https://www.cnblogs.com/ruigege0000/p/11894654.html