• socket网络编程


    socket就是一个模块,服务器

     1 import socket
     2 sk = socket.socket()
     3 sk.bind(('127.0.0.1',9999,))
     4 sk.listen(5)
     5 while True:
     6     conn,address = sk.accept()
     7     conn.sendall(bytes("welcome",encoding="utf-8"))
     8     while True:
     9         ret_bytes = conn.recv(1024)
    10         ret_str = str(ret_bytes,encoding='utf-8')
    11         print(ret_str)
    12         if ret_str == 'q':
    13             break
    14         conn.sendall(bytes((ret_str+""),encoding="utf-8"))#发送文件python3.5需要转换成字节再发送,面pyhton2.7不需要直接发送
    15     print(address,conn)

    客户端

     1 #!/usr/bin/env python3
     2 import socket
     3 obj = socket.socket()
     4 obj.connect(("127.0.0.1",9999))
     5 ret_bytes = obj.recv(1024)
     6 ret_str = str(ret_bytes,encoding='utf-8')
     7 print(ret_str)
     8 while True:
     9     inp = input("please input your text:")
    10 
    11     if inp == 'q':
    12         obj.sendall(bytes(inp,encoding="utf-8"))
    13         break
    14     else:
    15         obj.sendall(bytes(inp,encoding='utf-8'))
    16         ret = str(obj.recv(1024),encoding="utf-8")
    17         print(ret)
    18 
    19 obj.close()

    常用的发送sednall ,连接connect,接收recv

    上传文件到服务器

    服务端

     1 #!/usr/bin/env python3
     2 import socket
     3 sk = socket.socket()
     4 sk.bind(('127.0.0.1',9999,))
     5 sk.listen(5)
     6 
     7 while True:
     8     conn,address = sk.accept()
     9     conn.sendall(bytes("welcome",encoding="utf-8"))
    10     #接收文件大小
    11     file_size = str(conn.recv(1024),encoding="utf-8")
    12     print(file_size)
    13     #收到文件大小之后发送一个确认包
    14     conn.sendall(bytes("ack",encoding='utf-8'))
    15     total_size = int(file_size)
    16     has_recv = 0
    17     f = open('456.jpg','wb')
    18     while True:
    19         if total_size == has_recv:
    20                 break
    21         data = conn.recv(1024)
    22         f.write(data)
    23         has_recv +=len(data)
    24     f.close

    客户端

     1 import socket
     2 import os
     3 obj = socket.socket()
     4 obj.connect(("127.0.0.1",9999))
     5 ret_bytes = obj.recv(1024)
     6 ret_str = str(ret_bytes,encoding='utf-8')
     7 print(ret_str)
     8 
     9 #发送当前文件大小
    10 ret = os.stat('123.jpg').st_size
    11 obj.sendall(bytes(str(ret),encoding="utf-8"))
    12 #接收确认包解决粘包问题
    13 obj.recv(1024)
    14 #发送文件
    15 with open('123.jpg','rb') as f:
    16     for line in f:
    17         obj.sendall(line)
    18 obj.close()
  • 相关阅读:
    mysql find_int_set
    PHPSTROM8.0 注册码(7.1也可用)
    gym 101657 D
    gym101657 C
    poj 3525
    poj1279
    poj3335
    poj 1228
    poj 1873
    poj 2074
  • 原文地址:https://www.cnblogs.com/wang43125471/p/7877601.html
Copyright © 2020-2023  润新知