自學(xué)完python3基礎(chǔ)知識后,嘗試的第一個demo:(直接上代碼扩氢,復(fù)制可直接用)
服務(wù)端:
# 文件名:server.py
# 導(dǎo)入 socket、sys 模塊
import socket
import sys
# 獲取本地ip
def get_host_ip():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 114.114.114.114:是國內(nèi)移動爷辱、電信和bai聯(lián)du通通用的DNS录豺。
# 8.8.8.8:是GOOGLE公司提供的DNS朦肘,該地址是全球通用的。
s.connect(('114.114.114.114', 80))
ip = s.getsockname()[0]
finally:
s.close()
return ip
# 創(chuàng)建 socket 對象
#獲取tcp/ip套接字
tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#獲取udp/ip套接字
#udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 獲取ip(也可直接寫127.0.0.1)
host = get_host_ip()
port = 9999
# 綁定端口號
tcpSock.bind((host, port))
# 設(shè)置最大連接數(shù)双饥,超過后排隊(duì)
tcpSock.listen(5)
print('開始監(jiān)聽')
while True:# 不斷監(jiān)聽
print('等待接收')
# 建立客戶端連接
clientsocket,addr = tcpSock.accept()
# 打印客戶端地址
print("連接地址: %s" % str(addr))
# 接收客戶端消息(小于 1024 字節(jié))
client_msg = clientsocket.recv(1024)
print('client msg: %s' %client_msg.decode())
# 相應(yīng)客戶端信息(發(fā)送信息給客戶端)
msg = '歡迎訪問媒抠!'+ "\r\n"
clientsocket.send(msg.encode('utf-8'))
# 關(guān)閉客戶端套接字
clientsocket.close()
#關(guān)閉服務(wù)器套接字(可選)
tcpSock.close()
客戶端:
# 文件名:client.py
# 導(dǎo)入 socket、sys 模塊
import socket
import sys
# 獲取本地ip
def get_host_ip():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 114.114.114.114:是國內(nèi)移動兢哭、電信和bai聯(lián)du通通用的DNS领舰。
# 8.8.8.8:是GOOGLE公司提供的DNS,該地址是全球通用的迟螺。
s.connect(('114.114.114.114', 80))
ip = s.getsockname()[0]
finally:
s.close()
return ip
# 創(chuàng)建 socket 對象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 獲取ip(也可直接寫127.0.0.1)
host = get_host_ip()
# 設(shè)置端口號
port = 9999
# 連接服務(wù)冲秽,指定主機(jī)和端口
s.connect((host, port))
# 給服務(wù)端發(fā)送消息
s.send('我來逛逛!'.encode('utf-8'))
# 接收服務(wù)端相應(yīng)的數(shù)據(jù)(小于 1024 字節(jié))
msg = s.recv(1024)
# 關(guān)閉客戶端套接字
s.close()
print (msg.decode('utf-8'))
使用:
我是在MAC上測試矩父,創(chuàng)建兩個終端窗口锉桑,先運(yùn)行服務(wù)端的代碼
python3 /Users/xxx/server.py
再在另一個窗口運(yùn)行客戶端代碼
python3 /Users/xxx/client.py
注:不知道路徑的直接拉文件就行
補(bǔ)充:
在獲取本地ip時(shí),網(wǎng)上很多都是教如下方式獲取窍株,但是我獲取不到(別人能獲取到)民轴,查資料是說計(jì)算機(jī)名稱取得有問題(迷茫),所以改用demo中的方法獲取ip
import socket
獲取本計(jì)算機(jī)的名稱
hostname = socket.gethostname()
獲取本計(jì)算機(jī)IP
ip = socket.gethostbyname(hostname)