码迷,mamicode.com
首页 > 编程语言 > 详细

Python socket网络编程

时间:2019-12-29 18:27:35      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:strip()   cmd   以太网   声明   nbsp   bsp   tput   decode   lin   

伪代码(方便理解)

  发送端

        import socket
        socket.TCP/IP
        connect(a.ip, a.port)
        socket.send(hello)
        socket.recv()
        socket.close()

  接收端

        import socket
        socket.TCP/IP
        listen(0.0.0.0, 3306)
        waiting()
        recv()
        send

 

实例

  socket消息发送与接受simple

  服务端

 1 # 服务器端
 2 import socket
 3 
 4 server = socket.socket()
 5 server.bind((localhost, 5520))  # 绑定要监听端口
 6 server.listen(5)  # 监听
 7 
 8 print("我要开始等电话了")
 9 while True:
10     conn, addr = server.accept()  # 等电话打进来
11     # conn就是客户端连过来二在服务器端为其生成的一个连接实例
12 
13     print("电话来了")
14     while True:
15         data = conn.recv(1024)
16         print("recv:", data.decode())
17         if not data:
18             print("client has lost...")
19             break
20         conn.send(data.upper())
21 
22 server.close()

  客户端

# 客户端
import socket

client = socket.socket()  # 声明socket类型,同时生成socket连接对象
client.connect((localhost, 5520))

while True:
    msg = input(">>:").strip()
    if len(msg) == 0:
        continue
    # client.send(b"Hello World!")
    client.send(msg.encode(encoding="utf-8"))
    data = client.recv(1024)
    print("recv:", data.decode())

client.close()

  先运行服务端 再 运行客户端

 

  socket实现简单的ssh

  服务端
  

import socket
import os
import time

server = socket.socket()
server.bind((localhost, 9999))

server.listen()

while True:
    conn, addr = server.accept()
    print("new conn:", addr)
    while True:
        print("等待新指令")
        data = conn.recv(1024)
        if not data:
            print("客户端已断开")
            break
        print("执行指令:", data)
        cmd_res = os.popen(data.decode()).read()  #接受字符串,执行结果还是字符串
        if len(cmd_res) == 0:
            cmd_res = "cmd hs no output..."
        conn.send(str(len(cmd_res.encode())).encode("utf-8"))     # 先发大小给客户端
        # time.sleep(0.5)
        client_ack = conn.recv(1024)   # wait client to confirm

        conn.send(cmd_res.encode("utf-8"))

server.close()

  客户端

import socket

client = socket.socket()

client.connect((localhost, 9999))

while True:
    cmd = input(">>:").strip()
    if len(cmd) == 0:
        continue
    client.send(cmd.encode("utf-8"))
    cmd_res_size = client.recv(1024)  # 接受命令结果的长度
    print("命令结果大小:", cmd_res_size)
    client.send("准备好接受了".encode("utf-8"))
    received_size = 0
    received_data = b‘‘
    while received_size < int(cmd_res_size.decode()):
        data = client.recv(1024)
        received_size += len(data)  # 每次收到的有可能小于1024,所以必须用len判断
        # print(data.decode())
        received_data += data
    else:
        print("cmd res receive done...", received_size)
        print(received_data.decode())
    # cmd_res = client.recv(1024)

    # print(cmd_res.decode())

client.close()

  先运行服务端,再运行客户端。示例:在客户端里输入 ipconfig 

技术图片
>>:ipconfig
命令结果大小: b950
cmd res receive done... 950

Windows IP 配置


以太网适配器 以太网:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . : 

无线局域网适配器 本地连接* 3:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . : 

无线局域网适配器 本地连接* 4:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . : 

无线局域网适配器 WLAN:

   连接特定的 DNS 后缀 . . . . . . . : 
   本地链接 IPv6 地址. . . . . . . . : fe80::80b9:520a:30e8:b823%19
   IPv4 地址 . . . . . . . . . . . . : 10.64.226.255
   子网掩码  . . . . . . . . . . . . : 255.255.192.0
   默认网关. . . . . . . . . . . . . : 10.64.192.1

以太网适配器 蓝牙网络连接:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . : 
View Code

 

  

Python socket网络编程

标签:strip()   cmd   以太网   声明   nbsp   bsp   tput   decode   lin   

原文地址:https://www.cnblogs.com/myblog-wll/p/12115723.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!