ITPub博客

首页 > 应用开发 > Python > socket编程

socket编程

原创 Python 作者:20170405 时间:2020-08-14 14:06:27 0 删除 编辑

  加上循环的套接字通信

  服务端应该满足的特性:

  一直对外服务

  并发地提供服务

  import socket

  phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 在bind之前添加

  phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 重用ip和端口

  phone.bind('127.0.0.1', 8080)

  phone.listen(5)

  print(f'starting %s:%s'%('127.0.0.1', 8080))

  # 链接循环

  while True:

  conn, client_addr = phone.accept()

  print(client_addr)

  # 通信循环

  while True:

  try:

  data = conn.recv(1024)

  # 针对linux系统

  if len(data) == 0:

  break

  print('收到客户端数据:', data.decode('utd-8'))

  conn.send(data.upper())

  # 针对Windows系统

  except Exception:

  break

  conn.close()

  phone.close() # 关机

  客户端:

  import socket

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

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

  while True:

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

  phone.send(msg.encode('utd-8'))

  data = phone.recv(1024)

  print('服务端返回的数据:', data.decode('utd-8'))

  phone.close()

  5.3 远程连接服务端并执行指令

  服务端:

  import socket

  import subprocess

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

  phone.setsocketopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)

  phone.bind(('127.0.0.1', 8080))

  phone.listen(5)

  print('starting %s:%s'%('127.0.0.1', 8080))

  while True:

  conn, client_addr = phone.accept()

  print(client_addr)

  while True:

  try:

  cmd = coon.recv(1024)

  if len(cmd) == 0:

  break

  obj = subprocess.Popen(cmd.decode('utf-8'),

  shell = True,

  stdout = subprocess.PIPE,

  stderr = subprocess.PIPE)

  res1 = obj.stdout.read()

  res2 = obj.stderr.read()     郑州祛胎记医院哪家好 http://www.zykdtj.com/

  conn.send(res1 if len(res2) == 0 else res2)

  except Exception:

  break

  conn.close()

  phone.close()

  客户端:

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

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

  while True:

  cmd = input('[root@localhost]# ').strip()

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

  data = phone.recv(1024)

  print(data.decode('gbk))

  phone.close()


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69979119/viewspace-2711738/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: socket模块函数
请登录后发表评论 登录
全部评论

注册时间:2020-07-14

  • 博文量
    63
  • 访问量
    39790