立即学习:https://edu.csdn.net/course/play/24458/296235?utm_source=blogtoedu

1.服务器端

#以打电话通讯为例子进行说明
#导入相应的模块
import socket#1、设置套接字的类型以及协议(买手机),其实就是设置一个套接字,phone即为一个套接字
#设置为网络类型的套接字:socket.AF_INET
#设置为TCP协议:socket.SOCK_STREAM
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#2、绑定端口以及制定IP地址(绑定手机卡)
#bind(('ip地址',端口))传入的是一个元组
#端口是0-65550,其中0-1024是给操作系统使用的
phone.bind(('127.0.0.1',8080))#3、监听端口listen()
#表示可挂起的请求的最大数量为5个,如接着一个电话时,另一个电话又打进了,这时候需要将这个电话挂起,等当前的电话结束后再处理后面打进来的这个电话
phone.listen(5)#4、阻塞,等待客户端的连接accept()
res = phone.accept()'''(<socket.socket fd=348, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8080), raddr=('127.0.0.1', 65470)>, ('127.0.0.1', 65470))res返回了一个元组,含有两个元素,第一个元素是套接字对象:<socket.socket fd=348, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8080), raddr=('127.0.0.1', 65470)>,第二个是本地地址与端口组成的元素('127.0.0.1', 65470)'''#5、获得收发消息的套接字
conn,client_addr = res#6、收发消息#1)接收客户端的请求信息recv()
while True:data = conn.recv(1024)#1024表示接收的字节最大量是1024bytesprint('这是客户端的请求数据',data)#2)处理接收的请求后,发送数据send()#将客户端发送来的小写字母经过大写处理后发送返回给客户端conn.send(data.upper())#7、关闭接收消息的套接字
conn.close()#8、关闭phone套接字
phone.close()

2.客户端

#导入模块
import socket#1、设置phone套接字
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#2、连接服务器(打电话),本地地址:127.0.0.1
phone.connect(('127.0.0.1',8080))#3、向服务器发送请求send(),发送的数据不能直接发送字符串,因为要传送到物理层底层,因此需要转换成二进制的bytes类型进行发送,只需:发送的数据.encode('utf-8')即可
while True:msg = input("请输入:")phone.send(msg.encode('utf-8'))#4、接收服务器返回来的数据recv()res = phone.recv(1024)#接收小于1024bytes的数据print('服务器返回来的数据:',res)#5、关闭套接字phone
phone.close()

3.客户端数据

E:\python3\venv2\venv\Scripts\python.exe C:/Users/jinlin/Desktop/python_further_study/socket编程/客户端.py
请输入:12
服务器返回来的数据: b'12'
请输入:wkkk
服务器返回来的数据: b'WKKK'
请输入:我们
服务器返回来的数据: b'\xe6\x88\x91\xe4\xbb\xac'
请输入:111嗯嗯嗯·
服务器返回来的数据: b'111\xe5\x97\xaf\xe5\x97\xaf\xe5\x97\xaf\xc2\xb7'
请输入:

4.服务端数据

E:\python3\venv2\venv\Scripts\python.exe C:/Users/jinlin/Desktop/python_further_study/socket编程/服务器端.py
这是客户端的请求数据 b'12'
这是客户端的请求数据 b'wkkk'
这是客户端的请求数据 b'\xe6\x88\x91\xe4\xbb\xac'
这是客户端的请求数据 b'111\xe5\x97\xaf\xe5\x97\xaf\xe5\x97\xaf\xc2\xb7'

5.注:主要的循环通讯就是将服务器端和客户端相应的接收消息代码部分放在While True循环中,注意不要将套接字的关闭代码放在循环中!!!

学习笔记(06):Python网络编程并发编程-在简单套接字基础上加上通信循环相关推荐

  1. 学习笔记(04):Python网络编程并发编程-什么是socket

    立即学习:https://edu.csdn.net/course/play/24458/296233?utm_source=blogtoedu 1.什么是网络编程? 答:网络编程也叫做socket编程 ...

  2. 学习笔记(19):Python网络编程并发编程-互斥锁

    立即学习:https://edu.csdn.net/course/play/24458/296430?utm_source=blogtoedu 1.互斥锁: 多进程间的内存是相互隔离的,因此其数据也是 ...

  3. 学习笔记(34):Python网络编程并发编程-异步调用与回调机制

    立即学习:https://edu.csdn.net/course/play/24458/296452?utm_source=blogtoedu 1.知识点:(详细见代码注释) 1)同步调用: res1 ...

  4. 学习笔记(33):Python网络编程并发编程-进程池线程池

    立即学习:https://edu.csdn.net/course/play/24458/296451?utm_source=blogtoedu 进程池与线程池: 一般应用在网站上,进程池或线程池最大的 ...

  5. 学习笔记(28):Python网络编程并发编程-死锁与递归锁

    立即学习:https://edu.csdn.net/course/play/24458/296445?utm_source=blogtoedu 1.死锁(Lock()的局限性) 知识点:Lock()只 ...

  6. 学习笔记(18):Python网络编程并发编程-守护进程

    立即学习:https://edu.csdn.net/course/play/24458/296429?utm_source=blogtoedu 守护进程(了解) 1.概念:守护进程是主进程在创建子进程 ...

  7. 学习笔记(12):Python网络编程并发编程-解决粘包问题-简单版本

    立即学习:https://edu.csdn.net/course/play/24458/296243?utm_source=blogtoedu 粘包现象的解决:简单版 1.思路:       在服务器 ...

  8. 学习笔记(10):Python网络编程并发编程-粘包现象

    立即学习:https://edu.csdn.net/course/play/24458/296240?utm_source=blogtoedu 粘包现象:服务器接收到客户端的命令后,进行执行得到结果后 ...

  9. 学习笔记(09):Python网络编程并发编程-模拟ssh远程执行命令-代码实现

    立即学习:https://edu.csdn.net/course/play/24458/296239?utm_source=blogtoedu 1.服务器端:接收客户端发送的命令,subprocess ...

最新文章

  1. Pandas.DataFrame删除指定行和列(drop)
  2. 计算机网络-TCP拥塞控制
  3. Kubernetes入门——Kubernetes实现应用的高可用
  4. Java递归基础案例-汉诺塔
  5. Spring动态注入泛型集合Bean
  6. MongoDB 4.2 内核解析 - Change Stream
  7. 面试官问单表数据量大一定要分库分表吗?我们用六个字和十张图回答
  8. BlogEngine学习一:操作符重载
  9. 【Python】Python中的日志级别
  10. latex 基本用法
  11. Python Matplotlib
  12. vue 请求嵌套_vue和jQuery嵌套实现异步ajax通信
  13. Leetcode237之删除链表中的节点
  14. bim综合建模插件 进行碰撞检查只需六步!
  15. 微信支付信用卡还款将收费;小米宣布进军西欧市场;Uber筹备第二代自动驾驶汽车丨价值早报
  16. android so调用java,AndServer+Service打造Android服务器实现so文件调用
  17. 关于旋转矩阵R,平移向量t和变换矩阵T的关系
  18. 64bit ubuntu 14 04 LTS 火狐浏览器广告过滤插件
  19. 常用汇率查询货币列表实时汇率查询换算小demo
  20. vue-lazyload 图片懒加载

热门文章

  1. POJ 1228 —— “稳定”凸包
  2. getchar()和EOF总结
  3. 百度Echarts折线图tooltip里数据添加单位
  4. NSString的各种用法总结(创建、截取、判断比较、转化数据类型、拼接、替换、添加、追加、读取、写入、删去、改变)
  5. Vue---mock.js 使用
  6. 删除本地git的远程分支和远程删除git服务器的分支
  7. 1、python基础速成
  8. 《MySQL必知必会》[01] 基本查询
  9. 面向对象课程 - T-shirt
  10. 设计模式之PHP项目应用——单例模式设计Memcache和Redis操作类