zoukankan      html  css  js  c++  java
  • socket 网络编程

    一、服务端

    import socket
    sk = socket.socket()
    sk.bind(('127.0.0.1',9999,))
    sk.listen(5)
    
    while True:
        conn,address = sk.accept()
        conn.sendall(bytes('欢迎致电10086',encoding='utf-8'))
        while True:
            ret_bytes = conn.recv(1024)
            ret_str = str(ret_bytes,encoding='utf-8')
            if ret_str =='q':
                break
            conn.sendall(bytes(ret_str + 'ok',encoding='utf-8'))

    二、客户端

    import socket
    obj = socket.socket()
    obj.connect(('127.0.0.1',9999,))
    
    rec_bytes = obj.recv(1024)
    rec_str = str(rec_bytes,encoding='utf-8')
    print(rec_str)
    while True:
        inp = input('请输入要发送的内容:')
        if inp =='q':
            obj.sendall(bytes(inp,encoding='utf-8'))
            break
        else:
            obj.sendall(bytes(inp, encoding='utf-8'))
            ret = str(obj.recv(1024),encoding='utf-8')
            print(ret)
    obj.close()

    三、服务端传输文件

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 import socket
     4 sk = socket.socket()
     5 sk.bind(('127.0.0.1',9999,))
     6 sk.listen(5)
     7 
     8 while True:
     9     conn,address = sk.accept()
    10     conn.sendall(bytes('欢迎登陆FTP系统',encoding='utf-8'))
    11     # 先接受文件大小
    12     file_size = str(conn.recv(1024),encoding='utf-8')
    13     # 与客户端交互,发送响应,解决缓冲区粘包的问题
    14     conn.sendall(bytes('传输ok', encoding='utf-8'))
    15     total_size = int(file_size)
    16     has_recv = 0
    17     f = open('new.jpg','wb')
    18     # 接收文件直到完毕
    19     while True:
    20         if total_size ==has_recv:
    21             break
    22         data = conn.recv(1024)
    23         f.write(data)
    24         has_recv +=len(data)
    25     f.close()

    四、客户端发送文件

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 import socket
     5 import os
     6 obj = socket.socket()
     7 obj.connect(('127.0.0.1',9999,))
     8 
     9 rec_bytes = obj.recv(1024)
    10 rec_str = str(rec_bytes,encoding='utf-8')
    11 print(rec_str)
    12 
    13 # 发送当前文件大小
    14 size = os.stat('file.jpg').st_size
    15 obj.sendall(bytes(str(size),encoding='utf-8'))
    16 # 与服务端交互,解决缓冲区粘包的问题
    17 obj.recv(1024)
    18 # 发送文件
    19 with open('file.jpg','rb') as f:
    20     for line in f:
    21         obj.sendall(line)
    22 obj.close()
  • 相关阅读:
    ----uni-app之解决底部按钮绝对定位后被软键盘推起的bug----
    ----uni-app之解决app手机键盘消失后页面往上滚的问题----
    mysql tips
    mysql 添加行号
    mysql中的几种join 及 full join问题
    Dcoker中启动mysql,并实现root远程访问
    DockerToolbox在Win7上的安装和设置
    Class.getResourceAsStream 和 ClassLoder.getResourceAsStream 的区别
    tomcat 启动异常 EOFException: Unexpected end of ZLIB input stream
    java异常处理-finally中使用return和throw语句
  • 原文地址:https://www.cnblogs.com/Erick-L/p/6445261.html