套接字的應用

2021-09-02 23:34:55 字數 3530 閱讀 9525

from socket import *

import time

ip_port = ('127.0.0.2',8080)

buffer_size = 1204

udp_server = socket(af_inet,sock_dgram)

udp_server.bind(ip_port)

while true:

data, addr = udp_server.recvfrom(buffer_size)

back_time = time.strftime('%y-%m-%d-%x')

udp_server.sendto(back_time.encode('utf-8'),addr)

print(data.decode('utf-8'))

udp_server.close()

from socket import *

ip_port = ('127.0.0.2',8080)

buffer_size = 1204

udp_client = socket(af_inet,sock_dgram)

while true:

msg = input('任意鍵獲取時間')

udp_client.sendto(msg.encode('utf-8'),ip_port)

data,addr = udp_client.recvfrom(buffer_size)

print(data.decode('utf-8'))

udp_client.close()

輸出:

任意鍵獲取時間w3

2018-12-11-17:21:05

任意鍵獲取時間

2018-12-11-17:21:06

任意鍵獲取時間edf

2018-12-11-17:21:06

from socket import *

import subprocess

ip_port = ('127.0.0.1',8080)

back_log = 5

buffer_size = 1024

tcp_server = socket(af_inet,sock_stream)

tcp_server.setsockopt(sol_socket, so_reuseaddr, 1) # 重新使用ip位址,防止出現address被占用的錯誤

tcp_server.bind(ip_port)

tcp_server.listen(back_log)

while true: #鏈結迴圈

print('伺服器執行了')

conn,addr = tcp_server.accept()

print('新的客戶端鏈結',addr)

while true: #通訊迴圈

try:

cmd = conn.recv(buffer_size)

if not cmd: #當客戶端正常斷開時,cmd一直在收空資訊

break

print('收到的客戶端命令是',cmd)

res = subprocess.popen(cmd.decode('utf8'),shell=true,stdout=subprocess.pipe,

stdin=subprocess.pipe,stderr=subprocess.pipe)

err = res.stderr.read()

if err:

cmd_res = err

else:

cmd_res = res.stdout.read()

conn.send(cmd_res)

except exception as e:

print(e)

break #異常退出時,進入下次迴圈

conn.close() #正常退出時,斷開鏈結

tcp_server.close()

輸出:

伺服器執行了

新的客戶端鏈結 (『127.0.0.1』, 58242)

收到的客戶端命令是 b』dd』

收到的客戶端命令是 b』gg』

[winerror 10054] 遠端主機強迫關閉了乙個現有的連線。

伺服器執行了

新的客戶端鏈結 (『127.0.0.1』, 58245)

收到的客戶端命令是 b』dd』

收到的客戶端命令是 b』ddd』

收到的客戶端命令是 b』dir』

[winerror 10054] 遠端主機強迫關閉了乙個現有的連線。

伺服器執行了

新的客戶端鏈結 (『127.0.0.1』, 58271)

收到的客戶端命令是 b』dd』

from socket import *

ip_port = ('127.0.0.1',8080)

buffer_size = 1024

tcp_client = socket(af_inet,sock_stream)

tcp_client.connect(ip_port)

while true:

cmd = input('>>:').strip()

if not cmd:

continue

if cmd == 'quit':

break

tcp_client.send(cmd.encode('utf-8'))

data = tcp_client.recv(buffer_size)

print(data.decode('gbk'))

tcp_client.close()

輸出:

: ddd

『ddd』 不是內部或外部命令,也不是可執行的程式

或批處理檔案。

:dir

驅動器 c 中的卷沒有標籤。

卷的序列號是 ec05-9f96

c:\users\administrator\pycharmprojects\untitled1 的目錄

2018/12/11 21:20 .

2018/12/11 21:20

… 2018/12/11 21:18

.idea

2018/12/11 21:07 399

客戶端.py

2018/12/11 20:56 399

客戶端2.py

2018/12/11 21:20 1,358

服務端.py

2018/11/30 20:28 542 馬林

2018/11/30 22:05 542 馬林2

13 個檔案 5,251 位元組

4 個目錄 7,543,455,744 可用位元組

:

process finished with exit code -1

監聽套接字 連線套接字

摘要 對於伺服器程式設計中最重要的一步等待並接受客戶的連線,那麼這一步在程式設計中如何完成,accept函式就是完成這一步的。它從核心中取出已經建立的客戶連線,然後把這個已經建立的連線返回給使用者程式,此時使用者程式就可以與自己的客戶進行點到點的通訊了。accept函式等待並接受客戶請求 inclu...

監聽套接字 連線套接字的區別

摘要 對於伺服器程式設計中最重要的一步等待並接受客戶的連線,那麼這一步在程式設計中如何完成,accept函式就是完成這一步的。它從核心中取出已經建立的客戶連線,然後把這個已經建立的連線返回給使用者程式,此時使用者程式就可以與自己的客戶進行點到點的通訊了。accept函式等待並接受客戶請求 inclu...

Dart的套接字與web套接字

首先在專案中建三個dart檔案,如下圖 main.dart中的 如下 import dart io import dart convert main listarguments socket 1.dart中的 如下 import dart io main listarguments socket 2...