Socket编程

是谁在风中吟唱那半阕离歌,是谁将心事绾结成片,飘落在时光深处的花朵,一笺旧的丁香词,见证了曾经极致的绚烂。一声咏叹,画过眉间心上,华丽的总是会凋零,烟花过后,终是各走天涯。你为相遇的故事画上你的句号,我却借一段记忆,漂泊到曾经的梦境。回首往昔,如梦若烟,那些瞬间绚丽的花期,那些被辜负的斑斓年华 ,仍铭记心底,折叠成诗。

  • socket编程就是两个进程之间的通信。

socket分为客户端和服务端

server端

  1. 创建socket
  2. bind端口
  3. 等待连接
  4. 开始通讯
  5. 关闭连接

client端

  1. 创建socket
  2. 连接目标
  3. 开始通讯
  4. 关闭连接
  • server端C0DE

    from socket import * s=socket(AF_INET,SOCK_STREAM)#地址簇,tcp流 s.bind(('',1314)) s.listen(1) sock,addr = s.accept() print('connect by',addr) sock.send(b'wing') text = sock.recv(1024) print(text) sock.close() s.close()

  • client端C0DE

    from socket import * c = socket(AF_INET,SOCK_STREAM) c.connect(('127.0.0.1',1314)) text = c.recv(1024) print(text) c.send(b'wing') c.close()

实例


实现简单ssh

  • server端
    from socket import *
    import os
    s=socket(AF_INET,SOCK_STREAM)
    s.listen()    
    while True:
    sock,addr = s.accept()
    print('connect by',addr)
        while True:
            cmd = sock.recv(1024)
            if not cmd:
                print("GG")
                break
            print("执行指令中******************\n",cmd)
            result = os.popen(cmd.decode()).read()
            sock.send(str(len(result.encode())).encode('utf-8'))
            sock.send(result.encode())
            print("OK!")
     s.close()
  • client端
    from socket import *
    c = socket(AF_INET,SOCK_STREAM)
    c.connect(('127.0.0.1',1314))
    while True:
    cmd = input(">>>:").strip()
    if len(cmd)==0:break
    c.send(cmd.encode('utf8'))
    cmd_rec__size = c.recv(1024)
    print("命令大小",cmd_rec__size)
    rec_size = 0
    rec_data = b''
        while rec_size < int(cmd_rec__size.decode()):
            data = c.recv(1024)
            rec_size += len(data)
            rec_data += data
            print(rec_size)

        else:
            print("OK!")
            print("接受的字节",rec_size)
            print(rec_data.decode())
    c.close()

数据收发过程中的编码解码需要注意,除此之外,服务端一次只能接收1024字节,如果超过,会被存到缓冲区里面去,输入新命令有时候会显示上一次的命令,这个问题代码里面已经解决了。最坑的还是编码问题,字节长度不统一就GG。


   转载规则


《Socket编程》 Wing 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
sockserver sockserver
花开花落,转眼又是一年!
2017-07-30
下一篇 
Scrapy框架初体验 Scrapy框架初体验
我知道你会来,所以我等! scrapy这个框架现在懂了一点,会一些简单信息的抓取,items里面把想要的东西定义好,spider里面定义规则,现在xpath终于熟练了一点了,虽然不是很难,主要是把自己想要的信息提取出来,做成lis
2017-07-27
  目录