網路程式設計: 套接字基於TCP的應用
阿新 • • 發佈:2021-01-03
1、模擬通訊,進行訊息收發
【1】初版server端
from socket import *
# 1、建立套接字物件
sock = socket(family = AF_INET,type = SOCK_STREAM,proto = 0)
# 2、繫結地址
sock.bind(("127.0.0.1",8989))
# 3、設定監聽
sock.listen(5)
#4、等待連線
print("等待客戶端連線...")
connd,addr = sock.accept()
print("已有客戶端連線:",addr)
#5、訊息收發
#接收訊息
data = connd.recv(1024)
print ("伺服器收到的訊息:",data.decode())
#給連線的客戶端回覆訊息,
#給連線的客戶端回覆訊息,
# send方法的引數必須為位元組串,【1】【2】兩種方式均可以
#【1】對訊息進行編碼,轉換為位元組串
#使用【2】的話,不能使用中文,只能為ASCII編碼
# sed = connd.send("The server accepted your msg.".encode()) # 【1】
sed = connd.send(b"The server accepted your msg.") #【2】
print("send %d bytes"%sed)
#6、關閉套接字
connd.close()
sock.close()
【1】初版client端
import socket
# 1、建立套接字物件
sock = socket.socket()
#-------------------
# import匯入方式匯入socket的話,socket方法不能新增引數,server也一樣。
# from import *方式匯入時可以新增引數 #python版本:3.7.6
#sock = socket.socket(sock_family = AF_INET, sock_type = SOCK_STREAM,proto = 0)
# Traceback (most recent call last):
# File "D:/python_program/TCP/tcp-client.py", line 4, in <module>
# sock = socket.socket(sock_family = AF_INET, sock_type = SOCK_STREAM,proto = 0)
# NameError: name 'AF_INET' is not defined
#------------------
#2 、發起連線
sock.connect(("127.0.0.1",8989))
#3、訊息收發
#輸入要傳送的訊息
msg = input("請輸入要傳送的訊息:Msg>>>")
#傳送訊息
#-----
#sed=sock.send(msg.encode())
#print("send %d bytes"%sed)
#----
sock.send(msg.encode())
# 接收訊息
data = sock.recv(1024)
print("收到伺服器回覆的訊息:",data.decode())
#4、關閉套接字
sock.close()
#===========================================================================#