zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    日志到底该如何打印?
    消息摘要(MessageDigest)
    URL编码及解码原理
    AES简介
    MySQL中整型长度的意义
    keytool生成密钥
    证书类型及秘钥库
    Base64编码及解码原理
    Holistically-Nested Edge Detection 论文总结
    全新bili主题
  • 原文地址:https://www.cnblogs.com/wang43125471/p/7877601.html
Copyright © 2011-2022 走看看