socket是應用層於tcp/ip協議族通訊的中間軟體抽象層,它是一組介面。socket組織資料,以求符合指定的協議。
server端(伺服器端)
import socket
sk = socket.socket() # 括號內預設不加引數就是進行tcp連線
sk.bind(('127.0.0.1',8898)) #把位址繫結到套接字
sk.listen() #監聽鏈結
conn,addr = sk.accept() #接受客戶端鏈結
ret = conn.recv(1024) #接收客戶端資訊
print(ret) #列印客戶端資訊
conn.send(ret.upper) #向客戶端傳送資訊
conn.close() #關閉客戶端套接字
sk.close() #關閉伺服器套接字(可選)
client端(客戶端)
import socket
sk = socket.socket() # 建立客戶套接字
sk.connect(('127.0.0.1',8898)) # 嘗試連線伺服器
sk.send(b'hello!')
ret = sk.recv(1024) # 對話(傳送/接收)
print(ret)
sk.close() # 關閉客戶套接字
這樣子就可以簡單地建立通訊了,這時候在客戶端向服務端傳送訊息,服務端就會返回客戶端訊息的大寫,返回到客戶端,並且進行列印。
雖然這樣子是建立了連線,但是這時候存在乙個缺點,就是只能夠乙個服務端對應乙個客戶端,這樣子是非常的不理想。這時候就需要使用到多執行緒或者多程序來提高效率了。
服務端
import socket
from threading import thread
defconnect
(conn)
:while
true
: ret = conn.recv(
1024
)# 接收客戶端資訊 (二進位制資料)
# print(ret.decode('utf-8').upper()) # 列印客戶端資訊,並且轉換為大寫輸出(監聽客戶端的資訊)
conn.send(ret)
# 向客戶端傳送資訊
sk = socket.socket(
)sk.bind(
('127.0.0.1'
,8898))
# 把位址繫結到套接字
sk.listen(2)
# 監聽鏈結
while
true
: conn, addr = sk.accept(
)# 接受客戶端鏈結
t = thread(target=connect, args=
(conn,))
t.start(
)print
("接通連線"
)conn.close(
)# 關閉客戶端套接字
sk.close(
)# 關閉伺服器套接字(可選)
客戶端
import socket
sk = socket.socket(
)# 建立客戶套接字 括號內不加引數預設就是tcp協議
sk.connect(
('127.0.0.1'
,8898))
# 嘗試連線伺服器
while
true
:try
: sk.send(b'hello!'
)# 服務端接收到的只是二進位制的資料
ret = sk.recv(
1024
)# 對話(傳送/接收)
print
(ret.decode(
'utf-8'))
except exception as e:
print
("fail:"
,e)break
sk.close(
)# 關閉客戶套接字
print
("關閉連線"
)
這樣子就可以實現多個客戶端同時連線在乙個伺服器上了,這樣子在應用上提高了很大的效率。
服務端
import socket
udp_sk = socket.socket(
type
=socket.sock_dgram)
#建立乙個伺服器的套接字(udp連線)
udp_sk.bind(
('127.0.0.1'
,9000))
#繫結伺服器套接字
msg,addr = udp_sk.recvfrom(
1024
)print
(msg)
udp_sk.sendto(b'hi'
,addr)
# 對話(接收與傳送)
udp_sk.close(
)# 關閉伺服器套接字
客戶端
import socket
ip_port=
('127.0.0.1'
,9000
)udp_sk=socket.socket(
type
=socket.sock_dgram)
udp_sk.sendto(b'hello'
,ip_port)
back_msg,addr=udp_sk.recvfrom(
1024
)print
(back_msg.decode(
'utf-8'
),addr)
python使用socket模組進行網路程式設計
python標準庫提供了socket模組用於建立伺服器與客戶端,並且可以相互通訊。伺服器端建立起乙個socket物件,並等待客戶端連線。客戶端使用socket物件與伺服器連線,連線成功就可以進行相互通訊 即傳輸資料 socket模組的socket物件是socket網路程式設計的基礎物件,其原型為 s...
如何進行Socket程式設計 Python文件簡翻
本文著重討論inet ipv4 sockets,並限於stream tcp sockets範疇。直到目前為止,在各類ipc inter process communication 之中,socket仍然是最為流行的那個,尤其是對於跨平台通訊來說,socket是無可替代的存在。s.connect ww...
Silverlight下的Socket通訊
在silverlight中進行通訊,只能使用4502 4534之間的埠進行資料傳輸,另外silverlight客戶端會自動向943埠的伺服器端傳送乙個 的語句請求,然後伺服器端943埠回發以下檔案以許可socket通訊。1.0 encoding utf 8 from from 4502 4534 p...