python網路程式設計之socket的使用

2021-10-23 17:57:04 字數 4770 閱讀 7263

方法說明:

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...