python socket的简单例子
服务端的通信过程:
socket—>bind—>listen(连接请求)—>accept—>send(发送数据)—>recv(接受数据)—>close
客户端的通信过程:
socket—>bind(可选)—>connect(连接服务器)—>sends(发送数据)—>recv(接受数据)—>close
下面是一个简单的服务端客户端的实现:
server.py:
01 | #!/usr/bin/python |
02 | #encoding=utf-8 |
03 |
04 | import socket |
05 |
06 | s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
07 | #第一个参数AF_INET,AF_INET6,AF_UNIX默认AF_INET,第二个参数有SOCK_STREAM和SOCK_DGRAM |
08 | #默认为SOCK_STREAM流套接字提供双向有序且不重复的数据服务也可以直接写s=socket.socket() |
09 |
10 | #host = socket.gethostname() |
11 | host = '' |
12 | port = 1234 |
13 | s.bind((host, port)) #绑定socket地址只有一个参数 是一个地址+端口的元组 |
14 |
15 | s.listen( 10 ) #开始监听,参数是队列长度 |
16 |
17 | while True : |
18 | c, addr = s.accept() #接受一个连接 |
19 |
20 | print 'Get connection from' , addr |
21 | c.send( 'This is a simple server' ) #发送数据 |
22 | print c.recv( 1024 ) #读取数据 |
23 | c.close() |
client.py:
01 | #!/usr/bin/python |
02 | #encoding=utf-8 |
03 |
04 | import socket |
05 |
06 | s = socket.socket() #生成一个socket对象 |
07 |
08 | server = socket.gethostname() |
09 | print server |
10 | port = 1234 #一般1024以下端口号可能会有权限限制 |
11 | s.connect((server, port)) #连接服务器 |
12 | print s.recv( 1024 ) #读取数据 |
13 |
14 | say = raw_input (u '说点什么...' .encode( 'gbk' )) |
15 | s.send( str (say)) |
16 |
17 | s.close() #关闭连接 |