套接字编程

Posted ztzdhbg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了套接字编程相关的知识,希望对你有一定的参考价值。

目录

程序

#服务器端
# -*-coding:utf-8-*-
# Author: yqliu
# CreatDate: 2019/10/18 14:22

#基础版本1
#*****************************************************************************88

#
# import socket
# print ('基础版本服务端启动。。。。。。。。。。。。。。')
#
# server=socket.socket()
#
# server.bind(((
#     '127.0.0.1',9999
#              )))
#
# server.listen(5)
#
# conn,addr=server.accept()
#
# data=conn.recv(1024).decode('utf-8')
# print (data)
#
#
# send_msg=input('请输入需要传给客户的字符')
# conn.send(send_msg.encode('utf-8'))
# conn.close()
# server.close()

#基础版本2(循环输入套接字)
# print ('基础版本服务端启动。。。。。。。。。。。。。。')
# import socket
#
# server=socket.socket()
#
# server.bind((
#     '127.0.0.1',9527
# ))
#
# server.listen(5)
#
# conn,addr=server.accept()
#
# while True:
#     data=conn.recv(1024).decode('utf-8')
#     if data=='q':
#         break
#     print (data)
#     send_msg=input('请输入发往客户端的字符串').encode('utf-8')
#     conn.send(send_msg)
#
#
#
# conn.close()
#
# server.close()

#基础版本(多个客户端)
# print ('基础版本服务端启动。。。。。。。。。。。。。。')
# import socket
#
# server=socket.socket()
#
# server.bind((
#     '127.0.0.1',9527
# ))
#
# server.listen(5)
#
# while True:
#     conn,addr=server.accept()
#     print (addr)
#     while True:
#         try:
#             data = conn.recv(1024).decode('utf-8')
#             if data=='q':
#                 break
#             print(data)
#             send_msg=input('请输入往客户端发送的字符串')
#             conn.send(send_msg.encode('utf-8'))
#         except Exception as e:
#             print (e)
#             break
#     conn.close()
# server.close()

#基础版本4(作业)
#
# print ('服务端开始启动。。。。。。。。。。。')
#
# import socket
# import subprocess
#
# server=socket.socket()
#
# server.bind((
#     '127.0.0.1',9527
# ))
#
# server.listen(5)
#
# conn,addr=server.accept()
# print (addr)
#
# cmd=conn.recv(1024).decode('utf-8')
#
# obj=subprocess.Popen(
#     cmd,
#     shell=True,
#     stdout=subprocess.PIPE,
#     stderr=subprocess.PIPE
# )
#
# result=obj.stdout.read()+obj.stderr.read()
# conn.send(result)
# conn.close()
# server.close()

#基础版本5(作业升级)

import socket
import subprocess


server=socket.socket()

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

server.listen(5)

while True:
    conn,addr=server.accept()
    print (addr)
    while True:
        try:
            cmd=conn.recv(1024).decode('utf-8')
            if cmd=='q':
                break
            print (cmd)
            obj=subprocess.Popen(
                cmd,
                shell=True,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE
            )
            result=obj.stdout.read()+obj.stderr.read()
            # send_msg=input('请输入需要传给客户端的内容:')
            conn.send(result)
        except Exception as e:
            print (e)
            break
    conn.close()
server.close()
#客户端
# -*-coding:utf-8-*-
# Author: yqliu
# CreatDate: 2019/10/18 14:22

#基础版本1

# import socket
#
# client=socket.socket()
#
# client.connect((
#     '127.0.0.1',9999
# ))
#
# client.send('你好,服务端,我给你发信息了'.encode('utf-8'))
#
# data=client.recv(1024)
# print (data.decode('utf-8'))
# client.close()

#基础版本2(循环输入套接字)

#
# print ('客户端版本已经启动。。。。。。。。。。。。。。。。。。')
# import socket
#
# client=socket.socket()
#
# client.connect((
#     '127.0.0.1',9527
# ))
#
# while True:
#     send_msg=input('请输入需要发往服务端的字符串').strip()
#     if len(send_msg)==0:
#         print ('不能输入空字符串')
#         continue
#     if send_msg=='q':
#         print ('输入q退出程序')
#         break
#     client.send(send_msg.encode('utf-8'))
#     data=client.recv(1024).decode('utf-8')
#     print (data)
#
# client.close()

#基础版本3(多个客户端同时连接服务端)

# import socket
# print ('客户端版本已经启动。。。。。。。。。。。。。。。。。。')
#
# client=socket.socket()
#
# client.connect((
#     '127.0.0.1',9527
# ))
#
# while True:
#     send_msg=input('请输入发往服务端的内容:')
#     if len(send_msg)==0:
#         print ('不能输入空字符')
#         continue
#     if send_msg=='q':
#         break
#     client.send(send_msg.encode('utf-8'))
#     data=client.recv(1024).decode('utf-8')
#     print (data)
#
# client.close()

#基础版本4(作业)
#
# import socket
# client=socket.socket()
#
# client.connect((
#     '127.0.0.1',9527
# ))
#
# cmd=input('请输入往服务端发送命令')
# client.send(cmd.encode('utf-8'))
# data=client.recv(1024).decode('GBK')
# print (data)
# client.close()

#基础版本5(作业升级)

import socket

client=socket.socket()

client.connect((
    '127.0.0.1',9527
))

while True:
    cmd=input('请输入需要传给服务端的命令:')

    if cmd=='q':
        break
    if len(cmd)==0:
        print ('不能输入空字符')
        continue

    client.send(cmd.encode('utf-8'))
    data=client.recv(1024).decode('gbk')
    print (data)
client.close()

以上是关于套接字编程的主要内容,如果未能解决你的问题,请参考以下文章

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

使用 Pygments 检测代码片段的编程语言

面向面试编程代码片段之GC

如何在 Django Summernote 中显示编程片段的代码块?