Python網路程式設計之tcp socket服務端

2021-09-24 20:30:47 字數 2819 閱讀 1055

建立乙個tcp/socket伺服器接收客戶端傳送的資訊並返回給客戶端 

以多執行緒方式實現接收客戶端資訊 

將客戶端傳送的資訊解碼輸出

建立乙個tcp/socket服務端

寫乙個接收訊息的方法,可以接收客戶端訊息並解碼輸出 

服務端被動監聽,每有乙個客戶端連線就建立乙個子執行緒執行接收訊息方法

單程序輪詢實現併發伺服器

#!/usr/bin/env python3

# coding=utf-8

from socket import *

def main():

# 1、建立socket

server_socket = socket(af_inet, sock_stream)

# 2、設定埠復用

server_socket.setsockopt(sol_socket, so_reuseaddr, true)

# 3、設定為非堵塞

server_socket.setblocking(false)

# 4、繫結埠

server_socket.bind(("", 8888))

# 5、設定為被動socket

server_socket.listen(32)

print("listen...")

# 儲存所有已連線的客戶端

client_list =

while true:

# 等待客戶端的到來

try:

client_socket, client_addr = server_socket.accept()

except:

pass

else:

print("客戶端:[{},{}]已連線上".format(client_addr[0], client_addr[1]))

# 設定連線上來的客戶端為非堵塞

client_socket.setblocking(false)

# 遍歷所有客戶端是否有資料發過來

for client_socket, client_addr in client_list:

try:

data = client_socket.recv(1024)

except:

pass

else:

if data:

print("[{},{}]>>{}".format(client_addr[0], client_addr[1], data.decode("utf-8")))

else:

client_socket.close()

client_list.remove((client_socket, client_addr))

print("客戶端:[{},{}]已斷開連線".format(client_addr[0], client_addr[1]))

if __name__ == "__main__":

main()

多執行緒實現併發伺服器

#!/usr/bin/env python3

# coding=utf-8

from socket import *

from threading import thread

def recv_data(client_socket, client_addr):

while true:

data = client_socket.recv(1024)

if data:

print("[{},{}]>>{}".format(client_addr[0], client_addr[1], data.decode("utf-8")))

client_socket.send(data)

else:

print("客戶端:[{},{}]已斷開連線!".format(client_addr[0], client_addr[1]))

break

client_socket.close()

def main():

# 1、建立socket

server_socket = socket(af_inet, sock_stream)

# 2、設定埠復用

server_socket.setsockopt(sol_socket, so_reuseaddr, true)

# 3、繫結埠

server_socket.bind(("", 8888))

# 4、設定為被動socket

server_socket.listen(64)

print("listen...")

try:

while true:

# 5、等待客戶端連線

client_socket, client_addr = server_socket.accept()

print("新客戶:[{},{}]已連線".format(client_addr[0], client_addr[1]))

# 6、建立乙個執行緒處理客戶端的資料

t1 = thread(target=recv_data, args=(client_socket, client_addr))

# 7、設定執行緒守護

t1.setdaemon(true)

# 8、啟動執行緒

t1.start()

finally:

# 當為所有的客戶端服務完成之後再進行關閉,表示不再接收新的客戶端的連線

server_socket.close()

if __name__ == "__main__":

main()

Python網路程式設計之UDP

udp處理資料報,是一種無連線的協議 伺服器端 server socket.socket socket.af inet,socket.sock dgram 繫結ip server.bind 192.168.1.104 221 while true 接收 data,address server.rec...

Python網路程式設計之socket

socket是網路連線端點。例如當你的web瀏覽器請求ansheng.me的 時,你的web瀏覽器建立乙個socket並命令它去連線ansheng.me的web伺服器主機,web伺服器也對過來的請求在乙個socket上進行監聽。兩端使用各自的socket來傳送和接收資訊。在使用的時候,每個socke...

python網路程式設計之socket

socket是python網路程式設計中必不可少的模組,是內建模組,可以直接匯入。也稱其為套接字,是建立網路連線和會話的基礎。建立套接字 import socket s socket.socket help s s.close 關閉套接字建立套接字所需引數 socket.socket family ...