python-socket网络编程
admin
2023-07-31 01:50:02
0

http://homeway.me/

python网络编程学习

本文主要介绍socket网络通信,以及python的socket通信例子

0x01.socket网络通信

socket是嵌套字的意思,可以理解为server与client们间的在线会话。

关于socket通信可以看这里:

http://queengina.com/2014/10/09/简单理解Socket/


0x02.多线程socket

python下开启一个socket

对于server服务端,python socket需要做4件事情

1.开启socket

2.设置配置socket

3.绑定端口

4.帧监听,收发包

多线程socket

=> server.py

#!/usr/bin/python
# -*- coding:utf-8 -*-
import socket 
import threading 
import time
import sys

clients = [] 
class RecvMsg(threading.Thread): 
    def __init__(self, sock): 
        threading.Thread.__init__(self) 
        self.sock = sock 
    def run(self): 
        global clients 
        while True: 
            msg = self.sock.recv(512) 
            print \'recv=>\',msg 
            for client in clients: 
                if client != self.sock:
                    message = {}
                    message[\'id\'] = self.sock
                    message[\'time\'] = time.time()
                    message[\'type\'] = \'server send\'
                    print \'send=>\', message
                    client.send( str(message) )
                    pass
                pass

def main( port ): 
    sock = socket.socket() 
    sock.bind(( socket.gethostname(), int(port) )) 
    sock.listen(5) 
    while True: 
        client, address = sock.accept() 
        print \'a client connected\' 
        if client not in clients: 
            clients.append(client) 
            recvMsg = RecvMsg(client)
            recvMsg.start() 
    sock.close() 

if __name__ == \"__main__\": 
    port = sys.argv[1]
    main( port ) 

python server.py 56565


=> client.py

#!/usr/bin/python
# -*- coding:utf-8 -*-
import socket  
import threading 
import os,time 
import sys

class RecvMsg(threading.Thread): 
    def __init__(self, sock): 
        threading.Thread.__init__(self) 
        self.sock = sock 

    def run(self): 
        while True: 
            recvMsg = self.sock.recv(512) 
            print \'recv=>\',recvMsg 

def sendMsg(sock): 
    msg = time.time()
    message = {} 
    message[\'id\'] = os.getpid() 
    message[\'msg\'] = msg 
    print \'send=>\', message 
    sock.send(str(message)) 

def main( port ): 
    sock = socket.socket() 
    sock.connect(( socket.gethostname(), int(port) )) 
    recvMsg = RecvMsg(sock) 
    recvMsg.start() 
    while True:
        time.sleep(1.5) 
        sendMsg(sock) 

if __name__ == \"__main__\":
    port = sys.argv[1] 
    main( port ) 

python client.py 56565

关于报错

socket模块提供4个error函数。

1.关于一般I/O和通信有关的问题 socket.error

2.与查询地址有关 socket.gaierror

3.与其他地址错误有关 socket.herror

4.与上个socket调用timeout有关 socket.timeout

举个例子:(保存为error.py)

#!/usr/bin/python
# -*- coding:utf-8 -*-
from socket import *
import time,sys

HOST = socket.gethostname()
PORT = sys.argv[0] 
BUFSIZ = 1024
ADDR = ( HOST, int(PORT) )

SerSock = socket(AF_INET, SOCK_STREAM)

try:
    SerSock.bind(ADDR)
except socket.error, e:
    print \'socket.error=>\',e
except socket.gaierror, e:
    print \'socket.gaierror=>\',e
except socket.herror, e:
    print \'socket.herror=>\',e

SerSock.listen(5)

while True:
    print \'waiting for message...\'
    CliSock, addr = tcpSerSock.accept()
    print \'...connect from :\', addr
    while True:
        data = CliSock.recv(BUFSIZ)
        if not data:
            break
        CliSock.send(\'[%s] %s\' % (time.ctime(), data))
    CliSock.close()
SerSock.close()

python error.py 54545



本文出自 夏日小草,转载请注明出处: http://homeway.me/2014/10/21/python-socket-1/

-by小草

2014-10-21 22:34:54

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...