1. 程式人生 > 其它 >Python實現socket通訊:服務端和客戶端程式碼

Python實現socket通訊:服務端和客戶端程式碼

技術標籤:pythonsocket

Python實現socket通訊:服務端和客戶端程式碼

服務端程式碼

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import socket
def do_server(ip,port):
    ip_port=(ip,port)
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #連線地址
    s.bind(ip_port)
    # 開始TCP監聽.指定在拒絕連線之前,作業系統可以掛起的最大連線數量。該值至少為 1,大部分應用程式設為 5 就可以了。
s.listen(5) while True: c,address =s.accept() print("客戶端連線地址:",address) c.sendall('連線成功!!!'.encode()) Flag = True while Flag: #接收 TCP 資料,資料以字串形式返回,bufsize 指定要接收的最大資料量。 data = c.recv(1024) #接受客戶端傳遞過來的訊息 # c.send()傳送 TCP 資料,將 string 中的資料傳送到連線的套接字。返回值是要傳送的位元組數量,該數量可能小於 string 的位元組大小。
# c.sendall()完整發送 TCP 資料。將 string 中的資料傳送到連線的套接字,但在返回之前會嘗試傳送所有資料。成功返回 None,失敗則丟擲異常。 c.sendall('服務端迴應:已經收到:'.encode()+data) if data == 'exit': Flag = False else: print("客戶端傳遞過來的訊息是:"+data.decode()) c.close(
) s.close() if __name__ == '__main__': do_server("localhost", 8005)

示例效果:
在這裡插入圖片描述

客戶端程式碼

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import socket
from past.builtins import raw_input

def cli_do(ip,port):
    ip_port=(ip,port)
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #主動初始化TCP伺服器連線。一般ip_port的格式為元組(hostname,port),如果連接出錯,返回socket.error錯誤。
    s.connect(ip_port)
    s.settimeout(5)
    
    while True:
        #接收 TCP 資料,資料以字串形式返回,bufsize 指定要接收的最大資料量。flag 提供有關訊息的其他資訊,通常可以忽略。
        receive_data = s.recv(1024)
        print(receive_data.decode())
        inp = raw_input('要傳送給服務端的資料:')

        # conn.send()傳送 TCP 資料,將 string 中的資料傳送到連線的套接字。返回值是要傳送的位元組數量,該數量可能小於 string 的位元組大小。
        # conn.sendall()完整發送 TCP 資料。將 string 中的資料傳送到連線的套接字,但在返回之前會嘗試傳送所有資料。成功返回 None,失敗則丟擲異常。

        s.sendall(inp.encode())
        if inp == 'exit':
            break
    s.close()
    
if __name__ == '__main__':
    cli_do("localhost", 8005)

示例效果:
在這裡插入圖片描述