python网络通信编程实例_python-socket网络编程

本文详细介绍了Python中socket网络通信的基本原理和使用,包括服务器端如何通过多线程实现并发接收和发送消息。实例演示了如何创建客户端和服务器端进行数据交互,同时涵盖了常见socket错误处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python网络编程学习

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

0x01.socket网络通信

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

socket1.png

关于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

-by小草

2014-10-21 22:34:54

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值