Python网络编程

网络编程很常用,很底层,实际上,http协议,也是建立在网络编程上的,只是说这一层,由nginx或者是apache实现了。在工作当中,在网关设备之间传输数据的时候,就用到了网络编程,刚开始写的程序部署服务器后很不稳定,客户端异常或者是断开连接,服务端就会断开,或者是阻塞,不能再接受到客户端的信息,或者是处理多个客户端连接时候没有好的方案,出了不少问题,现在总结下这些问题。

服务端

#只要一个客户端连上,就能一直接受客户端的消息,是一个长连接
import socket
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
config = ("0.0.0.0",6002)
server.bind(config)
server.listen(5)
# 阻塞,等待(监听)连接,等有客户端连接之后才会往下执行
con,addr = server.accept()
while True:
    print("Client has link the server...")
    try:
        #阻塞,等待(监听)接受数据,收到数据之后才会往下执行
        msg = con.recv(1024)
        print(msg)
        con.send(b"this is from tcp_server")
    except Exception as e:
        #如果客户端断开,那么,报错,打破while的循环,否则一直while
        print("has stop")
        con.close()
        break

客户端

# 给tcp服务器发送5次消息
import socket
import time
count = 0
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
config = ("192.168.101.67",6002)
client.connect(config)
while count < 5:
    client.send(b"this is from client")
    #到recv()阻塞,等待接受数据,接收到之后接续执行
    print(client.recv(1024))
    count+=1
    time.sleep(1)

服务端多线程,一个tcp服务不可能仅仅只解决一个客户端的请求,如果按照上面的代码,那么,若两个客户端同时连接了,那么,只有在A客户端的连接关闭之后,另一个客户端B的阻塞才能终止,也才能和B客户端通信。如果才能够多个客户端连上tcp server后,都互不影响,各自做各自的工作呢——这就想到了多线程了。

import socket
import os
import threading

#得到socket
class get_server_socket():
    def __init__(self,ip,port):
        self.port = port
        self.ip = ip
    def get_socket(self):
        server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        config = (self.ip,self.port)
        server_socket.bind(config)
        server_socket.listen(10)
        print("Waiting for client connect...")
        return server_socket
#多线程监听客户端连接
class get_msg(threading.Thread):
    def __init__(self,socket,num):
        super(get_msg,self).__init__()
        self.socket = socket
        self.num = num
    def spy_client(self):
        # 每一个链接都需要创造一个线程,不然当一个线程连接上时候,其他的会阻塞
        con,addr = self.socket.accept()
        while True:
            recv = con.recv(1024) 
            con.send(b"This is reply from server port")
            print(recv)
            print("Current thread number is {}".format(threading.activeCount()))
    def run(self):
        try:
            self.spy_client()
        except Exception as e:
            #如果客户端主动断开或者那个线程错误,那么,继续延续,防止线程用完
            self.spy_client()

serverSocketInstance = get_server_socket("0.0.0.0",6001)
serverSocket = serverSocketInstance.get_socket()
thread_num = 3
 for x in range(0,thread_num):
     tmp = get_msg(serverSocket,x+1) 
     tmp.start()

服务端io复用

新同事所得工具(twisted)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容

  • 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编...
    程序员欧阳阅读 2,014评论 1 37
  • 使用网络的目的就是为了联通多方然后进行通信用的,即把数据从一方传递给另外一方。前面的学习编写的程序都是单机的,即不...
    壁花烧年阅读 1,160评论 0 0
  • 计算机网络概述 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。 按照计算机网络的定义,通过一定...
    蛋炒饭_By阅读 1,224评论 0 10
  • 3 socket模块-TCP gitbook链接:用python带你进入AI中的深度学习技术领域https://w...
    scrappyzhang阅读 1,238评论 0 2
  • 充实的一天结束了。 上午董老师,给我们讲述了《甜蜜午睡》活动,围绕着午睡,展开了培训。看似简简单单的午...
    菲你沫熟阅读 198评论 0 0