## Socket
百度百科上对Socket的解释是:Socket通常称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。
## Socket通信
下面图是socket服务器与客户端通信的过程,接下来我们简单讲一下编程
<div align="center"><img src="images/screenshot_1560395848760.png"/></div>
使用socket通信,首先导入socket模块
```python
import socket
```
### TCP服务器
1. 服务器创建套接字,绑定套接字到本地IP与端口
socket(family, type[, protocal])使用给定的套接族,套接字类型,协议编号(默认为0)来创建套接字。
```python
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind()
```
2. 开始监听链接
s.listen(backlog)
backlog为拒绝链接前,系统可以挂起的最大连接数,至少为1。
```python
s.listen(2)
```
3. 进入循环,不断接收客户端的链接请求
```python
while True:
s.accept()
```
accept()接受TCP链接并返回(conn, address),其中conn是新的套接字对象,可以用来接收和发送数据,address是链接客户端的地址。
4. 接收客户端传来的数据,并且给对方发数据
```python
s.recv()
s.sendall()
```
注意:
服务器与客户端不能直接发送列表,元素,字典等带有数据类型的格式,发送的内容必须是字符串数据。
5. 传输完毕后,关闭套接字。
```python
s.close()
```
#### 简单的服务器端代码
```python
import socket
HOST, PORT = '', 8000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(5)
print "Server start at:%s:%s" %(HOST, PORT)
print "wait for connection..."
while True:
conn, addr = s.accept()
print "Connected", addr
while True:
data = conn.recv(1024)
print data
conn.send("server received you message.")
conn.close()
s.close()
```
TCP客户端
1. 创建套接字并链接至远端地址(服务器)
```python
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect()
```
客户端调用connect()方法来建立与服务器的链接,并开始三次握手。握手保证了客户端可以正常连接到服务器,反之亦然。
2. 连接后发送数据和接收数据
```python
s.sendall()
s.recv()
```
3. 传输完毕后关闭套接字
```python
s.close()
```
#### 简单的客户端代码
```python
import socket
HOST, PORT = '192.168.0. 118', 8000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
while True:
cmd = raw_input("Input msg:")
s.send(cmd)
data = s.recv(1024)
print data
s.close()
```
参考:https://blog.51cto.com/loufeng/2340821
- 前言
- 第一章 树莓派快速入门
- 1. 初识树莓派3B+
- 2. 烧录系统
- 3. 树莓派连接键盘鼠标和显示器
- 4. 启动树莓派
- 5.树莓派连接网络
- 6. Windows远程访问树莓派
- 7. 终端通过raspi-config配置树莓派
- 第二章 树莓派编程
- 1. Linux入门操作
- 常用的linux命令
- 重要的快捷键
- 通过命令安装软件
- 树莓派关机/重启
- 2. 创建、编辑和保存文件
- 3. 创建并运行Python程序
- 4. 使用树莓派的GPIO口
- 第三章 树莓派套件应用
- 树莓派3B+ IO扩展板介绍
- 家居系统
- 会呼吸的RGB灯
- 树莓派控制家电
- 制作一个环境检测仪
- 树莓派摄像头做远程监控
- 摄像头使用
- socket通信
- PiCamera + socket远程监控
- AI语音
- 配置snowboy
- 自定义响应
- 采集语音和语音播放
- 语音机器人
- 图灵机器人
- 俄罗斯方块小游戏
- pygame基本使用
- ADKeyboard使用
- 俄罗斯方块实现原理
- 俄罗斯方块代码讲解
- 手势控制的树莓派相册
- 模块介绍
- 爬取图片
- 电子相册
- 附录
- 网址