查看: 2041|回复: 3
打印 上一主题 下一主题

【Linkit Smart 7688】Python TCP多线程服务端

[复制链接] qrcode

26

主题

34

帖子

100

积分

注册会员

Rank: 2

积分
100
楼主
跳转到指定楼层
发表于 2016-6-12 01:39 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 void_star 于 2016-6-12 13:49 编辑

实现功能:socket服务端监听本地制定端口,如果有TCP连接的话,会建立一个客户端线程与远程进行通信,可实现同时与多个远程连接进行通讯;仅仅做简单修改即可应用自己的其它项目中;
希望对初学者有用;
作者:voidar
Email:mailto:voidar@163.com
QQ:3210107341
注意:转载请注明出处
#代码开始
#coding=utf-8

import socket
import threading
import time

##################################################################
#服务器
class server(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.__host = ("192.168.1.248", 6111) #服务器地址
        self.__server = None #服务器socket
        self.__listenNum = 5 #服务器监听数量

    def run(self):
        print "服务器开启"
        try:
            self.__server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.__server.bind(self.__host)
            self.__server.listen(self.__listenNum)

            while True:
                conn, addr = self.__server.accept()
                print "与["+ str(addr) +"]连接"
                client(csocket=conn, chost=addr).start()
        except Exception, e:
            print "服务器异常"
            print e
        finally:
            print "服务器关闭"



##################################################################
#客户端
class client(threading.Thread):
    def __init__(self,csocket, chost):
        threading.Thread.__init__(self)
        self.__client = csocket #通信用的socket
        self.__host = chost #通信用的socket的信息
        self.__bufNum = 1024 #接收缓冲区的大小
        self.__timeout = 20 #空闲连接时间

    def run(self):
        if self.__client == None or self.__host == None: return
        try:
            self.__client.settimeout(20) #20秒无数据自动断开
            while True:
                temp = self.__client.recv(self.__bufNum)
                if temp==None or temp.strip().__len__() <= 0: return

                #解析数据的处理
                print "[" + str(self.__host) + "]: " + str(temp).decode("gb2312")
                self.__client.send(temp)
                time.sleep(0.2)
                #数据处理完毕
        except Exception, e:
            print "与["+ str(self.__host) +"]通信发送异常"
            print e
        finally:
            print "与["+ str(self.__host) +"]断开连接"
            try: self.__client.close()
            except:pass


if __name__ == '__main__':
    server().start()

#代码结束

使用方式:
1:将#代码开始~#代码结束之间的代码复制
2:在linux系统中新建一个文件,文件名可为tcpServer.py 如果是在windows系统下新建文件,将编码格式设置为utf8
3:将复制的内容粘贴到tcpServer.py文件夹下
4:如果在windows下新建的tcpServer.py,需要将文件放到linux下面
5:修改self.__host = ("192.168.1.248", 6111) #服务器地址 ip为linux本地IP,端口为自己想要设置的端口
6:在linux环境下,进入放置tcpServer.py的目录下,执行指令pyhon tctServer.py,会看到以下界面

py001.jpg



7:使用调试助手测试:


8:发送一个字符串,点击发送,会看到tcpServer给调试助手返回了同样的字符串
9:查看运行tctServer.py的linux终端显示



10:两个客户端访问服务端:




服务端仅仅将接收到的数据进行显示和返回给客户端,如果要进行其它操作,可在源码中直接更改!
希望对初学者有用!

备注信息:以上代码在PC和自己编译的python环境中运行均良好,未在Smart7688自带的python环境中测试运行;因为之前测试Smart7688自带的python运行程序时不稳定,所以自己重新编译了python和系统内核[因为内核限制太多,并且预装了好多软件],不过整个pyhon环境大小50M+,所以将python预装到U盘当中;
编译的python环境支持RT5350, MT7620等,如有需要可以留言!

From:Voidar


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

1

主题

82

帖子

29

积分

新手上路

Rank: 1

积分
29
沙发
发表于 2016-6-12 04:15 PM | 只看该作者
这么多显示区?
回复 支持 反对

使用道具 举报

0

主题

99

帖子

2

积分

新手上路

Rank: 1

积分
2
板凳
发表于 2016-6-13 06:46 PM | 只看该作者
学习了,感谢楼主。
回复 支持 反对

使用道具 举报

3

主题

83

帖子

25

积分

新手上路

Rank: 1

积分
25
地板
发表于 2016-6-15 10:16 AM | 只看该作者
学习一下,,,,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表