python网络编程-socket
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python网络编程-socket,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2808字,纯文字阅读大概需要5分钟。
内容图文
![python网络编程-socket](/upload/InfoBanner/zyjiaocheng/1202/26963b33255c473c8bb53ac3973bee1b.jpg)
python提供了两个socket模块
Socket,它提供了标准的BSD Sockets API
SocketServer,它提供了服务器中心类,可以简化网络服务器的开发
下面先说socket模块
1、socket类型
套接字格式:
socket(family,type[,protocal]) 使用给定的地址、套接字类型、协议编号(默认为0)来创建套接字
常用的套接字类型:
socket.SOCK_STREAM 面向连接的,TCP
socket.SOCK_DGRAM无连接,UDP
创建TCP Socket:s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
创建UDP Socket:s=socket.socket(socket.AF_INET,socket.DGRAM)
2、socket函数
注意点:
1)TCP返送数据时,已建立好TCP连接,所以不需要指定地址。UDP是面向无连接的,每次发送要指定是发给谁。
2)python2.x版本发送的是字符串格式的数据,python3.x是字节格式,需注意。
s.bind(address) 将套接字绑定到地址,在AF_INET下,以元组(host,port)的形式表示地址
s.listen(backlog) 开始监听TCP传入连接。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值最少为1,大部分应用程序设定为5就可以了。
s.accept() 接收TCP连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。
s.connect(address) 连接到address处的套接字。一般address的格式为元组(hostname,port),如果连接出错,返回socket error错误。
s.connect_ex(address) 功能与connect(address)相同,但是成功返回0,失败返回error的值。
s.recv(bufsize[,flag]) 接收TCP套接字的数据。数据以bytes字节形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略。
s.send(string[,flag]) 发送TCP数据。将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。
s.sendall(string[,flag]) 完整发送TCP数据。将string中的数据发送到连接的套接字。但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。
s.close() 关 闭套接字。
3、socket编程思路
TCP服务端:
1 创建套接字,绑定套接字到本地IP与端口
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind()
2 开始监听连接
s.listen()
3 进入循环,不断接受客户端的连接请求
s.accept()
4 然后接收传来的数据,并发送给对方数据
s.recv()
s.sendall()
5 传输完毕后,关闭套接字
s.close()
TCP客户端:
1 创建套接字,连接远端地址
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect()
2 连接后发送数据和接收数据
s.sendall()
s.recv()
3 传输完毕后,关闭套接字
s.close()
4、简单的socket编程代码
?SERVER端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import
socket
#导入socket模块
ip_port
=
(
‘127.0.0.1‘
,
9999
)
#定义主机,端口号
s
=
socket.socket()
#实例化socket对象(买手机)
s.bind(ip_port)
#绑定IP端口(买手机卡)
s.listen(
5
)
#建立5个连接池,等待接收请求,挂起连接
#等待电话
conn,addr
=
s.accept()
#conn就是建立通信,负责收发消息的通道,每次只处理一个请求,
#accept是阻塞请求,当第二个请求来的时候会进入listen连接池
#挂起等待处理
while
True
:
try
:
recv_data
=
conn.recv(
1024
)
#收消息
if
len
(recv_data)
=
=
0
:
break #如果客户输入为空的话退出
if
recv_data
=
=
‘exit‘
:
break #客户端退出,服务端跟着退出
send_data
=
recv_data.upper()
print
(send_data)
conn.send(send_data)
#回复消息
except
Exception:
break
conn.close()
#挂电话,关闭连接通道
|
Client端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import
socket
ip_port
=
(
‘127.0.0.1‘
,
9999
)
s
=
socket.socket()
s.connect(ip_port)
#这里的connect实际是服务端的conn,与服务端建立连接
while
True
:
send_data
=
input
(
">>>: "
).strip()
#发送消息
if
send_data
=
=
‘exit‘
:
break
if
len
(send_data)
=
=
0
:
continue
s.send(bytes(send_data,encoding
=
‘utf-8‘
))
#收消息
recv_data
=
s.recv(
1024
)
print
(
str
(recv_data,encoding
=
‘utf-8‘
))
#挂电话
s.close()
|
原文:http://www.cnblogs.com/yangruizeng/p/5655792.html
内容总结
以上是互联网集市为您收集整理的python网络编程-socket全部内容,希望文章能够帮你解决python网络编程-socket所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。