千家信息网

python socket编程

发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,建立服务器连接需要六个步骤。第1步是创建socket对象。调用socket构造函数。socket=socket.socket(familly,type)family的值可以是AF_UNIX(Unix域
千家信息网最后更新 2025年02月08日python socket编程

建立服务器连接需要六个步骤。

第1步是创建socket对象。调用socket构造函数。

socket=socket.socket(familly,type)
family的值可以是AF_UNIX(Unix域,用于同一台机器上的进程间通讯),也可以是AF_INET(对于IPV4协议的TCP和 UDP),至于type参数,SOCK_STREAM(流套接字)或者 SOCK_DGRAM(数据报文套接字),SOCK_RAW(raw套接字)。

第2步则是将socket绑定(指派)到指定地址上,socket.bind(address)

address必须是一个双元素元组,((host,port)),主机名或者ip地址+端口号。如果端口号正在被使用或者保留,或者主机名或ip地址错误,则引发socke.error异常。

第3步,绑定后,必须准备好套接字,以便接受连接请求。

socket.listen(backlog)
backlog指定了最多连接数,至少为1,接到连接请求后,这些请求必须排队,如果队列已满,则拒绝请求。

第4步,服务器套接字通过socket的accept方法等待客户请求一个连接:

connection,address=socket.accept()
调用accept方法时,socket会进入'waiting'(或阻塞)状态。客户请求连接时,方法建立连接并返回服务器。accept方法返回一个含有俩个元素的元组,形如(connection,address)。第一个元素(connection)是新的socket对象,服务器通过它与客户通信;第二个元素(address)是客户的internet地址。

第5步是处理阶段

服务器和客户通过send和recv方法通信(传输数据)。服务器调用send,并采用字符串形式向客户发送信息。send方法返回已发送的字符个数。服务器使用recv方法从客户接受信息。调用recv时,必须指定一个整数来控制本次调用所接受的最大数据量。recv方法在接受数据时会进入'blocket'状态,最后返回一个字符串,用它来表示收到的数据。如果发送的量超过recv所允许,数据会被截断。多余的数据将缓冲于接受端。以后调用recv时,多余的数据会从缓冲区删除。

第6步,传输结束,服务器调用socket的close方法以关闭连接。


建立一个简单客户连接则需要4个步骤。


第1步,创建一个socket以连接服务器 socket=socket.socket(family,type)

第2步,使用socket的connect方法连接服务器 socket.connect((host,port))

第3步,客户和服务器通过send和recv方法通信。

第4步,结束后,客户通过调用socket的close方法来关闭连接。

server.py
#!/usr/bin/env python
# TCP-server
import socket
import time

HOST=''
PORT=8001
BUFSIZ=1024

sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind((HOST,PORT))
sock.listen(5)
while True:
print 'waiting for connection...'
connection,address=sock.accept()
print ('connection from', address)
while True:
try:
data=connection.recv(BUFSIZ)
except:
print (e)
connection.close()
break
if not data:
break
s='Hi,you send me : [%s] %s' % (time.ctime(),data.decode('utf8'))
connection.send(s.encode('utf8'))
print ([time.ctime()],':',data.decode('utf8'))
connection.close()
sock.close()

client.py
#!/usr/bin/env python
# TCP-client
import socket
import sys

HOST='127.0.0.1'
PORT=8001
BUFSIZ=1024
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect((HOST,PORT))
while True:
data=raw_input('-->')
if data=='quit':
sys.exit()
client.send('%s\r\n' % data.encode('utf8'))
d=client.recv(BUFSIZ)
print (d.decode('utf8'))

方法 服务器 服务 客户 数据 套接字 元素 地址 字符 通信 主机 信息 口号 字符串 对象 步骤 状态 传输 缓冲 最大 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 挖财网络技术有限公司工资 方创网络技术有限公司 1.简述网络安全的目标 江西一站式软件开发价格大全 现代网络技术英语 魔兽世界新服务器出来了吗 吴两全网络技术 湖南信息化软件开发 嵌入式软件开发公司推荐 成都市网络安全和信息化委员会 金融软件开发使用需要资质吗 统计局网络安全隐患排查报告 网络安全病毒是什么 软件开发生产效率p50 服务器防护盾多久可以安装好 一个信息管理系统的数据库 重启公司网站服务器 软件开发的人称为 网络安全审查具体细则 关系数据库系统中的关系指的是 天津有哪些软件开发公司吗 网络安全威胁大分类 互联网科技公司的整顿 阳光电源嵌入式软件开发有前景么 长沙安康网络技术有限公司 生态系统数据库 数据库系统阶段发展特点 server服务器性能监控 厦门润迪软件开发有限公司 北京映翰通网络技术股份
0