python 進行socket 通訊

2021-10-23 08:18:41 字數 3224 閱讀 1116

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...