Socket: 对所有上层协议(TCP/IP,UDP等)的底层封装。

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

建立网络通信连接至少要一对端口号(socket)。

协议类型又叫地址簇

socket实例,分别写在两个.py里面,客户端发出去的内容是小写的,接收到的内容是大写的。

运行的时候,先运行server,再运行client端。

#服务器端
import socket
server=socket.socket()
server.bind(('localhost',6969)) #绑定要监听哪个IP地址和端口
server.listen() #开始监听
print("我要开始等电话了")
conn,addr=server.accept() #每进来一个链接,服务器端都会为那个链接生成一个实例。阻塞
print(conn,addr) #就是客户端连过来而在服务器端为其生成的一个连接实例。
print("电话来了")
data=conn.recv(1024) #从客户端接收数据的大小。最大8192.如果客户端没有传回来数据,则会一直阻塞到这里。
print("recv:",data)
conn.send(data.upper())
server.close()

客户端一断开,conn.recv收到的就都是空数据了,就会陷入死循环。

#客户端
#(发出去的内容是小写的,收到的回应是大写的。)
import socket client=socket.socket() #声明socket类型,同时生成socket连接对象;定义地址簇和协议类型(默认IPV4和TCP/IP) client.connect(("localhost",6969)) #连接本机的6969端口 client.send(b"hello server, I am client") data=client.recv(1024) #1024个字节,接受服务器端的返回 print("recv:",data) client.close()

服务器端的运行结果:

我要开始等电话了
<socket.socket fd=288, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 6969), raddr=('127.0.0.1', 50703)> ('127.0.0.1', 50703)
电话来了
recv: b'hello server, I am client'

客户端的运行结果:

recv: b'HELLO SERVER, I AM CLIENT'

2.所有的来往数据必须是byte类型的。

#服务器端
import socket
server=socket.socket()
server.bind(('localhost',6969)) #绑定要监听的端口
server.listen() #监听
print("我要开始等电话了")
conn,addr=server.accept()
print(conn,addr) #就是客户端连过来而在服务器端为其生成的一个连接实例。
print("电话来了")
data=conn.recv(1024)
print("recv:",data)
conn.send("我是服务器端来的确认信息".encode("utf-8"))
#conn.send(data.upper())
server.close()
#客户端(发出去的内容是小写的,收到的回应是大写的。)
import socket
client=socket.socket()
#声明socket类型,同时生成socket连接对象;定义地址簇和协议类型(默认IPV4和TCP/IP)
client.connect(("localhost",6969)) #连接本机的6969端口
client.send("我要准备下载电影a".encode("utf-8"))
data=client.recv(1024) #1024个字节,接受服务器端的返回
print("recv:",data.decode())
client.close()

最新文章

  1. Linux下FTP安装与配置
  2. 关于MATHAPP的测试
  3. vim使用快捷键
  4. 手把手教你入门web.xml:吃透监听器
  5. information_schema.collation_character_set_applicability 学习
  6. 几种改变Activity回退栈默认行为的Intent Flag
  7. WPF移动Window窗体(鼠标点击左键移动窗体自定义行为)
  8. [转]Gitlab-CI持续集成之Runner配置和CI脚本
  9. Java基础篇——线程、并发编程知识点全面介绍(面试、学习的必备索引)
  10. windows10上安装mysql(详细步骤)
  11. 图片文字识别aip的一个小Demo
  12. [原创]RedisDesktopManager工具使用介绍
  13. 帝国cms支持的变量及灵动标签变量汇总
  14. MySql查询出来的值为 boolean类型的值
  15. 在线即时展现 Html、JS、CSS 编辑工具 - JSFiddle
  16. layui的table中使用switch
  17. UIStoryboard跳转界面
  18. grid control 11.1.0.1 安装指南
  19. golang的多协程实践
  20. MySQL中事务的概述ACID了解

热门文章

  1. P1563 玩具谜题
  2. Java并发编程系列一:Future和CompletableFuture解析与使用
  3. EF SQLite的Like语句,生成为CHARINDEX的解决办法
  4. 「日常训练」School Marks(Codeforces Round 301 Div.2 B)
  5. 【SpringCloud】第七篇: 高可用的分布式配置中心(Spring Cloud Config)
  6. Python 默认参数值
  7. leetcode-位1的个数(位与运算)
  8. hdu刷题1
  9. 剑指offer-二叉树中和为某一值的路径24
  10. 小米 OJ 编程比赛 02 月常规赛