## Socket

百度百科上对Socket的解释是:Socket通常称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。

## Socket通信

下面图是socket服务器与客户端通信的过程,接下来我们简单讲一下编程

使用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

socket树莓派c语言,socket通信相关推荐

  1. go语言socket通信初试

    2019独角兽企业重金招聘Python工程师标准>>> 听说go的在系统性能方面有很大的优势,最近对go语言产生了极大的兴趣,相对现有的项目用go改造,原有的项目用的ace框架编写的 ...

  2. C语言 socket编程实例

    C语言 socket编程实例 一. 面向连接的流式套接字 C/S 例子 二. 非阻塞的多人聊天服务器端例子 三. 简单的 IPv6 UDP socket编程 四.使用wireshark抓包分析tcp协 ...

  3. C语言socket accept()函数(提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符)

    文章目录 名称 使用格式 功能参数描述 参数 sockfd addr addrlen 返回值 示例 man 2 文档中的accept解释 错误处理 名称 accept() 接收一个套接字中已建立的连接 ...

  4. Java语言Socket接口用法详解

    Socket接口用法详解   在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Serve ...

  5. python共享内存通信mapofview_python map eval strPython socket模块实现的udp通信功能示例...

    本文实例讲述了Python socket模块实现的udp通信功能.分享给大家供大家参考,具体如下: socket介绍 socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要 ...

  6. C语言Socket编程(计算机网络作业)

    最近我计算机网络课程要做作业了,没办法跟着老师一步一步的写C语言的代码,使用的计算就是Socket通信发送消息:代码实现的功能很简单,客户端向服务器端发送消息,服务器端接收客户端发来的消息,并且输出显 ...

  7. c语言socket通讯和进行进行大文件分片传输

    c语言socket通讯和进行进行大文件分片传输 server端代码和client端代码 在windows上创建Cygwing工程11socket-server,创建完成后启动工程看不到效果,必须放到l ...

  8. 【socket】C语言的Socket网络编程

    目录 Socket网络编程 1.网络知识 网络中进程之间如何通信? 什么是Socket? socket一词的起源 怎么理解端口? 怎么理解socket ? 2. 客户/服务器模式 2.1 服务器端: ...

  9. socket网络编程及通过socket接口实现一个自我通信的简易UDP服务器

    网络编程socket基础 认识socket套接字 先用一张图引出socket的内容 根据上面的图示我们可以知道socket其实是位于应用层与传输层之间的一层软件抽象层.它是一组接口,在后面的部分我们会 ...

最新文章

  1. 入手ipod touch4
  2. org.apache.jasper.JasperException: /jsp/menu.jsp (line: 8, column: 1) Page directive
  3. 发表学术论文必须做的十件事(下)
  4. go语言buffio与继承
  5. BERT在多模态领域中的应用
  6. 如何使用R语言在SAP Analytics Cloud里绘制各种统计图表
  7. 客户端的socket是否需要bind?
  8. 轻量高效的开源JavaScript插件和库 【转】
  9. 掌握 Ajax,第 11 部分: 服务器端的 JSON
  10. python的基础 杂项(十四)
  11. JavaWeb — 解决请求前与请求后中文乱码的问题
  12. easyui ---- jEasyUI-定制提示信息面板组件
  13. Deepin20.5安装maven
  14. 【linux内核分析与应用-陈莉君】物理内存分配与回收机制下
  15. number of splits 划分的条件
  16. 50欧姆系统的由来的小故事
  17. 男人不能没钱女人不能没爱
  18. 点击复制微信号并跳转到微信
  19. sql 查询某个字段 出现次数 或者 次数大于1 或者 出现次数最多
  20. Android StatusBar 黑底白字

热门文章

  1. 集成腾讯互动直播之大咖模式采坑记录
  2. SM2 签名预处理操作
  3. 计算机毕业设计ssm图书推荐系统93gei系统+程序+源码+lw+远程部署
  4. 佳能Canon PIXMA TS8260 打印机驱动
  5. c#判断输入是否为数字类型
  6. LintCode 1228. 可怜的猪 JavaScript算法
  7. 业七业八结合兵法谈下棋
  8. 2021-05-24 Hikvision DS-TVL224-4-5Y Python 显示部分驱动代码
  9. 提取EPSON机器人示教点位pts文件中的点位信息
  10. No suitable application records were found. Verify your bundle identifier 'com.aaa.bbb