python tcp 服務器端+客戶端


1、最簡單的服務端和客戶端

服務端代碼

import socket                    #網絡編程需要用到socket模塊

server = socket.socket()         #創建一個用於監聽連接的Socket對像(服務器端) 
server.setblocking(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #解決服務重啟時報address already in use
server.bind(('127.0.0.1', 9001)) #設置服務端的ip和端口號
server.listen()                  #開始監聽

conn, addr = server.accept()     #接受服務器端發出的消息和地址信息
c_info = conn.recv(1024)         #將接受的消息存入到c_info變量中
print(c_info)
conn.send(b'hello word')         #向客戶端發出消息
conn.close()                     #關閉連接
server.close()                   #關閉服務端

 

客戶端代碼

import socket                        #網絡編程需要用到socket模塊

client = socket.socket()             #創建一個客戶端
client.connect(('127.0.0.1', 9001))  #連接服務端

client.send(b'nice to meet you')     #向服務端發消息
s_info = client.recv(1024)           #接受服務端發來的消息
print(s_info)
client.close()                       #關閉客戶端

2、可交互的服務端和客服端

 服務端代碼

import socket

server = socket.socket()
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(('127.0.0.1', 9001))
server.listen()

conn, addr = server.accept()
while True:
    info=input('>>>')                        #輸入數據,編碼並發送給客戶端
    info=info.encode('utf-8')                
    conn.send(info)                          
    c_info = conn.recv(1024).decode('utf-8') #接受客戶端消息並解碼
    print(c_info)
    if c_info == 'bye':                      #當客戶端發送bye時,服務端給客戶端發送bye並結束循環
        conn.send(b'bye')
        break
conn.close()
server.close()

客戶端代碼

import socket

client = socket.socket()
client.connect(('127.0.0.1', 9001))
while True:
    s_info = client.recv(1024)               #接受服務端的消息並解碼
    s_info = s_info.decode(encoding='utf-8')
    print(s_info)
    if s_info == 'bye':                     #如果服務端發送的消息為bye,回復bye,結束循環
        client.send(b'bye')
        print('bye_1')
        break

    info = input('>>>')                     #輸入數據,編碼並發送給服務端
    info = info.encode('utf-8')
    client.send(info)
client.close()

總結:無論是服務端和客戶邏輯是怎樣的,服務端和客戶端收發要對應。

3、一個服務端+多個客戶端:

服務端代碼

import socket

server = socket.socket()
server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
server.bind(('127.0.0.1',9002))
server.listen()
#while語句作用:(當客戶端關閉后)接受新客戶端的連接,實現服務端不間斷地提供服務。
while True:
    conn,addr = server.accept()
    #while語句作用:接受來自客戶端的消息、打印,回復消息;當客戶端的消息中包含‘bye’時,斷開本次連接。
    while True:
        msg = conn.recv(1024).decode('utf-8')
        print(msg)
        if 'bye' in msg:      #當收到的信息包含bye,給客戶端發送bye,跳出當前while循環
            conn.send(b'bye')
            break
        info = input('>>>').encode('utf-8')
        conn.send(info)
conn.close()

server.close()

客戶端1代碼

import socket

client_01 = socket.socket()
client_01.connect(('127.0.0.1',9002))
while True:
    info = input('>>>').encode('utf-8')
    client_01.send(b'from c1:'+info)
    msg = client_01.recv(1024).decode('utf-8')
    print(msg)
    if msg == 'bye':  #當收到bye時,給服務器回復bye,跳出循環。
        client_01.send(b'bye')
        break
client_01.close()

客戶端代碼2

import socket

client_02 = socket.socket()
client_02.connect(('127.0.0.1',9002))
while True:
    info = input('>>>').encode('utf-8')
    client_02.send(b'from c2:'+info)
    msg = client_02.recv(1024).decode('utf-8')
    print(msg)
    if msg == 'bye':    #當收到bye時,給服務器回復bye,跳出循環。
        client_02.send(b'bye')
        break
client_02.close()

 

 

代碼親測過,只寫了邏輯實現,改進空間很大,請多指點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM