美文网首页
TCP/UDP套接字通信

TCP/UDP套接字通信

作者: 慕知 | 来源:发表于2021-12-22 16:40 被阅读0次

一,基于TCP套接字通信

服务端

import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

phone.bind(('127.0.0.1',8081))
phone.listen(5)

print('准备监听')
conn,client_addr=phone.accept()
print(client_addr)

while True:
    try:
        data=conn.recv(1024)
        if len(data)==0:break    #如果不加该条件,当客户端非法断开链接,意味着异常行为,针对unix系统死循环现象
        print('客户端发的消息:',data.decode('utf-8'))
        conn.send(data.upper())
    except Exception:
        break         #如果不加该条件,当客户端非法断开链接,意味着异常行为,针对于winodws系统的直接报错


conn.close()

phone.close()

客户端

import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

phone.connect(('127.0.0.1',8081))

while True:
    msg=input("要输入的内容:".strip())
    if len(msg)==0:continue      # if not msg:continue,如果不加该条件,输入空信息会导致客户端停在原地
    phone.send(msg.encode('utf-8'))
    data=phone.recv(1024)
    print(data.decode('utf-8'))

phone.close()

服务端 客户端1 客户端2

二,基于UDP套接字通信

服务端

from socket import *
server=socket(AF_INET,SOCK_DGRAM)

server.bind(('127.0.0.1',8087))

while True:
    data,client_addr=server.recvfrom(1024)
    # 客户端client.sendto(msg.encode('utf-8'),('127.0.0.1',8087)),所以这里定义两个值data,client_addr
    server.sendto(data.upper(),client_addr)

server.close()

客户端

from socket import *
client=socket(AF_INET,SOCK_DGRAM)


while True:
    msg=input('>>>>').strip()
    client.sendto(msg.encode('utf-8'),('127.0.0.1',8087))
    data=client.recvfrom(1024)
    print(data)

client.close()


- 执行如下(服务端无返回信息)

>>>>p
(b'P', ('127.0.0.1', 8087))
>>>>ls
(b'LS', ('127.0.0.1', 8087))
客户端,纠正!!!UDP先启动任意一端都可以

三,实现远程执行命令

客户端

from socket import *
client=socket(AF_INET,SOCK_STREAM)
client.connect(('127.0.0.1',8083))

while True:
    cmd=input('>>>>').strip()
    if len(cmd)==0:continue
    client.send(cmd.encode('utf-8'))
    data=client.recv(1024)
    print(data.decode('utf-8'))

服务端

from socket import *
import subprocess

server=socket(AF_INET,SOCK_STREAM)
server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)    #端口复用,防止测试总报错端口占用
server.bind(('127.0.0.1',8083))

server.listen(5)
# 第一件事:循环的从链接池中取出链接请求并建立双向链接,拿到链接对象
while True:
    conn,client_ip=server.accept()
    # 拿到链接对象,进行通话循环
    while True:
        try:
            data=conn.recv(1024)            #易错,是conn.revc,不是server.revc(conn相当于一条桥梁)
            if len(data)==0:break
            msg=subprocess.Popen(data.decode('utf-8'),
                                 shell=True,
                                 stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE)
            res_stdout=msg.stdout.read()
            res_stderr=msg.stderr.read()
            print((res_stdout+res_stderr).decode('utf-8'))
            conn.send(res_stdout+res_stderr)
        except Exception:
            break
    conn.close()

服务端

相关文章

  • Socket 通信之 TCP 通信

    上篇文章主要总结了 UDP 套接字的通信方式,这篇文章主要讲解 TCP 套接字的通信方式。 TCP 通信流程 一台...

  • MFC网口编程

    Socket套接字通信 TCP UDP详解(网络通信)[https://blog.csdn.net/qq_4179...

  • socket注意事项

    Socket TCP 和 UDP最大的区别就是:UDP 套接字没有 listen TCP 套接字使用recv()/...

  • iOS中的socket通信

    socket 套接字, 是基于TCP UDP 协议的 一种通信机制, 它本身就是对TCP 和UDp 协议应用的一...

  • TCP/UDP套接字通信

    一,基于TCP套接字通信 服务端 客户端 二,基于UDP套接字通信 服务端 客户端 - 执行如下(服务端无返回信息...

  • Socket、TCP和UDP

    Socket介绍 socket 套接字, 是基于TCP UDP 协议的 一种通信机制, 它本身就是对TCP ...

  • day33-基于UDP的套接字通信

    一、基于udp协议的套接字通信 TCP VS UDP协议1、可靠性tcp协议是可靠协议:对方必须回复一个ack...

  • 初见Linux-socket

    什么叫网络编程? 就是使用网络协议,进行网络通信。数据报->UDP 流式套接字-> TCP 原始套...

  • python学习笔记3

    Python网络编程 TCP面向连接的通信方式,UDP与TCP不同,与虚拟电路完全相反,是数据报型的无连接套接字。...

  • ss:一个统计网络和套接字信息的命令行工具

    ss简介 ss命令可以用来统计套接字信息,它支持PACKET套接字、TCP套接字、UDP套接字、DCCP套接字、R...

网友评论

      本文标题:TCP/UDP套接字通信

      本文链接:https://www.haomeiwen.com/subject/lfzxqrtx.html