Python實現socket通訊:服務端和客戶端程式碼
阿新 • • 發佈:2021-02-08
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)
示例效果: