pythonsocket通信

学习编程,总会遇到服务器和客户端,相互通信的问题,现在就来介绍一下python的socket模块

首先理解一下客户端和服务器的概念,服务器首先在一台主机的ip和端口,启动服务并监听,等待客户端的连接

客户端通过服务器的ip和端口,连接到服务器

我们现在来用python写服务器,创建一个server.py文件

1.创建socket对象,调用socket的构造函数,

<span style="font-size:14px;">server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)</span>
socket.socket(famliy,type),family代表地址家族,

family参数代表地址家族,可为AF_INET或AF_UNIX。AF_INET家族包括Internet地址,AF_UNIX家族用于同一台机器上的进程间通信。
type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字)。       

2.将socket绑定到服务器的主机和ip,通过Bind方法(假如我们在主机的2220端口进行监听)

server.bind(('127.0.0.1',2220))
 由AF_INET所创建的套接字,address地址必须是一个双元素元组,格式是(host,port)。host代表主机,port代表端口号。如果端口号正在使用、主机名不正确或端口已被保留,bind方法将引发socket.error异常。

3.服务器开始监听,接收客户端的连接请求

server.listen(5)
这里的5的意思,可以允许多客户端连接到服务器,至少为1,超过这个数字,服务器便会拒绝连接

4.服务器套接字通过accept方法等待客户请求的一个连接

connection,address=server.accept()
调 用accept方法时,socket会时入“waiting”状态。客户请求连接时,方法建立连接并返回服务器。accept方法返回一个含有两个元素的 元组(connection,address)。第一个元素connection是新的socket对象,服务器必须通过它与客户通信;第二个元素 address是客户的Internet地址。

5.服务器和客户端进行连接之后,先开始互相传输数据。服务器通过调用send方法,用字符串的形式向客户发送信息,

通过recv方法接收客户端发过来的数据,必须制定一个收到的最大数据量

server.send(data)
server.recv(1024)
6.等到数据传输结束,服务器调用close方法,关闭连接
server.close()
服务端基本上就是这样,

接下来我们来创建客户端,创建一个client.py

1.客户端相应的也要创建一个socket对象,来连接服务端

client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
2.客户端连接服务器,通过调用connect方法实现,这里的主机和端口要和服务器绑定的一致

client.connect(('127.0.0.1',2220))
3.客户端和服务器连接好后,便可开始和服务器进行数据交互

client.send(data)
client.recv(1024)
4.传输结束,客户端调用socket的close方法
client.close




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章