Python3中socket的一种实现方式

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017-06-09 22:57
# @Author  : wlgo2108
# @Site    :
# @File    : ConnSocket.py
# @Software: PyCharm
# @Email   : [email protected]

from socket  import *
import struct

class ConnSocket:
    def __init__(self,ADDR = ()):
        self.addr = ADDR
        self.tcpClientSocket = socket(AF_INET,SOCK_STREAM)
        self.tcpClientSocket.connect(self.addr)

    def send_msg(self,msg ):
        HEADSIZE = 2
        msgLen = len(msg)
        # 定义struct的fmt
        fmt = ‘!cc‘ + str(msgLen) + ‘s‘
        # 字符串打包成我们系统的格式
        some = struct.pack(fmt, bytes(chr(int(msgLen / 256)),"utf-8"), bytes(chr(int(msgLen % 256)),"utf-8"), bytes(msg,"utf-8"))
        # 将字符串发送到后台
        self.tcpClientSocket.sendall(some)
        # 接收反回报文头,解析字符串返回长度
        recvlen = self.tcpClientSocket.recv(HEADSIZE)
        li = struct.unpack(‘!BB‘, recvlen)  # 返回一个元组,含两个个元素BB表示两个无符号字符
        # 计算报文长度
        recvlen = li[1] + 256 * li[0]
        # 获取报文长度的返回字符串
        data = self.tcpClientSocket.recv(recvlen)
        # print data
        # 关闭socket
        self.tcpClientSocket.close()
        # 返回报文返回结果
        return data.decode("gb2312")

    def otherSendMsg(self, msg):
        HEADSIZE = 4
        # 建立socket对象
        tcpClientSocket = socket(AF_INET, SOCK_STREAM)
        # 连接到ADDR     ADDR=(HOST,PORT) 是一个元组
        tcpClientSocket.connect(self.addr)

        msgLen = len(msg)

        fmt = ‘!cc‘ + str(msgLen) + ‘s‘
        # 字符串打包成我们系统的格式
        some = struct.pack(fmt, chr(msgLen / 256), chr(msgLen % 256), msg)
        # 将字符串发送到后台
        tcpClientSocket.sendall(some)

        # 接收反回报文头,解析字符串返回长度
        recvlen = tcpClientSocket.recv(HEADSIZE)
        print
        ‘recvlen=‘, recvlen
        li, = struct.unpack(‘!BB‘, recvlen)  # 返回一个元组,含两个个元素BB表示两个无符号字符
        print
        ‘li‘, li
        recvlen = li[1] + 256 * li[0]

        # 获取返回字符串
        reply = tcpClientSocket.recv(recvlen)
        # 关闭socket
        tcpClientSocket.close()

        return reply

  

时间: 2024-08-01 13:25:34

Python3中socket的一种实现方式的相关文章

jQuery中的Ajax几种请求方式

1. load( url, [data], [callback] ) :载入远程 HTML 文件代码并插入至 DOM 中. url (String) : 请求的HTML页的URL地址. data (Map) : (可选参数) 发送至服务器的 key/value 数据. callback (Callback) : (可选参数) 请求完成时(不需要是success的)的回调函数. 这个方法默认使用 GET 方式来传递的,如果[data]参数有传递数据进去,就会自动转换为POST方式的.jQuery

【学习笔记】——原生js中常用的四种循环方式

一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0   网页输出"欢迎下次光临" 在网页中弹出框输入1   网页输出"查询中--" 在网页中弹出框输入2   网页输出"取款中--" 在网页中弹出框输入3   网页输出"转账进行中--" 在网页中弹出框输入其他字符   网页输出"无效按键" 四种循环: for循环 while循环 for  in

MVC中CheckBoxList的3种实现方式

比如,当为一个用户设置角色的时候,角色通常以CheckBoxList的形式呈现.用户和角色是多对多关系: using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace MvcApplication2.Models { public class User { public int Id { get; set; } [Display(Name = "用户名")] public

Springboot中IDE支持两种打包方式,即jar包和war包

Springboot中IDE支持两种打包方式,即jar包和war包 打包之前修改pom.xml中的packaging节点,改为jar或者war    在项目的根目录执行maven 命令clean package -Dmaven.test.skip=true,即可打包,如下 命令执行成功后,在target目录下即可看到打包好的文件 提示:若打的包为jar包,可通过java -jar guns-xxx.jar来启动Guns系统 原文地址:https://www.cnblogs.com/mracale

wpf中UserControl的几种绑定方式

原文:wpf中UserControl的几种绑定方式 我们经常会抽取一些可重用的控件,某个属性是否需要重用,直接决定了这个属性的绑定方式. 1.完全不可重用的控件 有一些与业务强相关的控件,它们的属性完全来自ViewModel,越是相对复杂的控件,越容易这样.比如: // ChooseUc.xaml <UserControl> <StackPanel Orientation="Horizontal"> <Label Content="选择一个水果:

python3中socket套接字的编码问题解决

一.TCP 1.tcp服务器创建 #创建服务器 from socket import * from time import ctime #导入ctime HOST = '' #任意主机 PORT = 21567 #随机提供个端口号 BUFSIZ = 1024 # 缓冲区大小设置为1KB,可以根据网络性能和程序需要改变这个容量 ADDR = (HOST, PORT) tcpSerSock = socket(AF_INET, SOCK_STREAM) #分配了 TCP 服务器套接字 tcpSerSo

细说java中Map的两种迭代方式

以前对java中迭代方式总是迷迷糊糊的,今天总算弄懂了,特意的总结了一下,基本是算是理解透彻了. 1.再说Map之前先说下Iterator: Iterator主要用于遍历(即迭代访问)Collection集合中的元素,Iterator也称为迭代器.它仅仅只有三个方法:hasNext(),next()和remove() hasNext():如果仍有元素可以迭代,则返回 true.(换句话说,如果 next 返回了元素而不是 抛出异常,则返回 true). next():返回迭代的下一个元素. re

Android中Activity的四种启动方式

谈到Activity的启动方式必须要说的是数据结构中的栈.栈是一种只能从一端进入存储数据的线性表,它以先进后出的原则存储数据,先进入的数据压入栈底,后进入的数据在栈顶.需要读取数据的时候就需要从顶部开始读取数据,栈具有记忆功能,对栈的操作不需要指针的约束.在Android中Activity的显示其实就是一个入栈和出栈的过程.当打开一个Activity的时候Activity入栈,当关闭一个Activity的时候Activity出栈,用户操作的Activity位于栈顶,一般情况下,一个应用程序对应一

JAVA中单例模式的几种实现方式

1 线程不安全的实现方法 首先介绍java中最基本的单例模式实现方式,我们可以在一些初级的java书中看到.这种实现方法不是线程安全的,所以在项目实践中如果涉及到线 程安全就不会使用这种方式.但是如果不需要保证线程安全,则这种方式还是不错的,因为所需要的开销比较小.下面是具体的实现代码: 转http://www.cnblogs.com/CodeGuy/p/3580486.html public Class Singleton { private static Singleton instance