方法說明:
socket.gethostname() # 獲取當前主機的主機名
socket.gethostbyname('主機名') # 根據主機名,獲取到對應的ip位址,只要是主機hosts檔案存在的就可以
socket.gethostbyname_ex('主機名') # 同時,只不過返回的是乙個列表(返回真實的主機名、別名列表和ip位址列表)
socket.gethostbyaddr('主機名') # 同時,只不過返回的是乙個列表(返回真實的主機名、別名列表和ip位址列表)
socket.getservbyname('服務名', '協議名') # 返回服務對應的協議的埠號
getprotobyname() # 對映乙個協議名(例如:'tcp')到乙個數字
socket.getdefaulttimeout() # 獲取預設的超時值
socket.setdefaulttimeout() # 設定預設的超時值
方法使用(示例):
in [1]: import socket
in [2]: socket.gethostname()
out[2]: 'fengling'
in [3]: socket.gethostbyname('fengling')
out[3]: '172.24.16.171'
in [4]: socket.gethostbyname_ex('fengling')
out[4]: ('fengling', , ['172.24.16.171'])
in [5]: socket.gethostbyaddr('fengling')
out[5]: ('fengling', , ['172.24.16.171'])
in [6]: socket.getservbyname('pop3', 'tcp')
out[6]: 110
in [7]: socket.getservbyname('pop3')
out[7]: 110
in [8]: socket.setdefaulttimeout(5)
in [9]: socket.getdefaulttimeout()
out[9]: 5.0
**如下(示例):
import socket
import traceback
def port_exist(port: int, ip: str):
try:
r_tcp = socket.socket(socket.af_inet, socket.sock_stream) # tcp方式
# r_udp = socket.socket(socket.af_inet, socket.sock_dgram) # udp方式
result_tcp = r_tcp.connect_ex((ip, port)) # 獲取tcp埠結果
# result_udp = r_udp.connect_ex((port, ip)) # 獲取udp埠結果
if result_tcp == 0:
print(f":存在!")
return true
else:
print(f":不存在!")
return false
except exception as e:
traceback.format_exc(e)
if __name__ == '__main__':
port_exist(80, '39.96.7.141')
服務端指定埠實時監聽,是否有人進行連線服務端**如下(示例):如果有人進行連線,返回資訊
import socket
s_tcp = socket.socket(socket.af_inet, socket.sock_stream)
hostname = socket.gethostname()
port = 8080
# 繫結埠,用於監聽
s_tcp.bind((hostname, port))
# 設定連線數
s_tcp.listen(5)
while 1:
# 建立客戶端連線
cliectsocket,addr = s_tcp.accept()
print(f'連線位址')
msg='連線成功'
# 傳送訊息
cliectsocket.send(msg.encode('utf-8'))
# 關閉連線
cliectsocket.close()
客戶端**如下(示例):
import socket
s_tcp = socket.socket(socket.af_inet, socket.sock_stream)
hostname = socket.gethostname()
port = 8080
# 連線服務端
s_tcp.connect((hostname, port))
# 獲取資訊
msg = s_tcp.recv(1024)
# 關閉連線
s_tcp.close()
print(msg.decode('utf-8'))
優化一下
服務端**如下(示例):
import socket
import time
s_tcp = socket.socket(socket.af_inet, socket.sock_stream)
hostname = socket.gethostname()
port = 8080
s_tcp.bind((hostname, port))
s_tcp.listen(5)
while 1:
cliectsocket,addr = s_tcp.accept() # 建立客戶端連線
print(f'連線位址')
r_msg = cliectsocket.recv(1024)
if r_msg:
msg = '你向伺服器傳送資料成功!'
cliectsocket.send(msg.encode('utf-8')) # 傳送連線
cliectsocket.close() # 關閉連線
客戶端**如下(示例):
import socket
# 傳送方法
def send_msg(s_tcp):
print('發生111')
msg = input('請輸入你要傳送的訊息')
s_tcp.send(msg.encode('utf-8'))
# 接收方法
def receive_msg(s_tcp):
msg = s_tcp.recv(1024)
print(msg.decode('utf-8'))
# 主方法
def socket_obj():
hostname = socket.gethostname()
port = 8080
s_tcp = socket.socket(socket.af_inet, socket.sock_stream)
s_tcp.connect((hostname, port))
while 1:
print(""""
1. 傳送
2. 接收
""")
num = input('請輸入操作指令:')
if num == '1':
send_msg(s_tcp)
elif num == '2':
receive_msg(s_tcp)
else:
print('指令不正確!')
if __name__ =='__main__':
socket_obj()
執行結果:
# 先執行服務端, 再執行客戶端
# 演示
" 1. 傳送
2. 接收
請輸入操作指令:1
發生111
請輸入你要傳送的訊息111
" 1. 傳送
2. 接收
請輸入操作指令:2
你向伺服器傳送資料成功!
" 1. 傳送
2. 接收
請輸入操作指令:2
" 1. 傳送
2. 接收
以上就是今天要講的內容,本文僅僅簡單介紹了socket的使用,和一些常用放的示例操作
linux socket網路程式設計之socket屬性
1.函式用法 include include int getsockopt int sockfd,int level,int optname,void optval,socklen t optlen 函式用於獲得某個套接字的屬性 int setsockopt int sockfd,int level...
網路程式設計 Python網路程式設計詳解socket
1 伺服器就是一系列硬體或軟體,為乙個或多個客戶端 服務的使用者 提供所需的 服務 它存在唯一目的就是等待客戶端的請求,並響應它們 提供服務 然後等待更多請求。2 客戶端 伺服器架構既可以應用於計算機硬體,也可以應用於計算機軟體。3 在伺服器響應客戶端之前,首先會建立乙個通訊節點,它能夠使伺服器監聽...
Python網路程式設計之UDP
udp處理資料報,是一種無連線的協議 伺服器端 server socket.socket socket.af inet,socket.sock dgram 繫結ip server.bind 192.168.1.104 221 while true 接收 data,address server.rec...