2.Python网络编程_TCP(简略版)

TCP监听套接字:
当新的客户端请求连接时,服务器端监听套接字收到消息,会分配一个新的套接字对应于客户端(新socket包括四部分:源IP、源端口号、目的IP、目的端口号)用于接收客户端的消息,仔细观察可以看出对于不同的客户端每个新产生的套接字的源IP和源端口号都是一样的,目的IP和目的端口号则不同,说明四元组只要其中一个不相同,这个socket就是不一样的.

#tcp客户端
import socket def cilent():
#1.创建TCP套接字
# socket.AF_INET:IPV4 socket.SOCK_STREAM:TCP
socket_tcp_cilent=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #客户端一般不绑定(bind)ip和port
#2.连接服务器
server_ip='192.168.1.103'
server_port=5566
server_addr=(server_ip,server_port)
socket_tcp_cilent.connect(server_addr) while True:
#3.发送数据/接收数据
send_data=input("请输入要发送的数据: ")
if send_data=='exit':
print("客户端关闭!")
break
socket_tcp_cilent.send(send_data.encode('utf-8'))
recv_data,recv_ip_port=socket_tcp_cilent.recvfrom(1024)
print("服务器端回送的消息%s"%(recv_data.decode('gbk'))) #4.关闭TCP连接
socket_tcp_cilent.close() if __name__=='__main__':
cilent();
#TCP服务器端
import socket def server():
num=1
#1.创建套接字
socket_tcp_server=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #2.绑定本地信息 bind(ip,port)
server_ip=''
server_port=5566
server_addr=(server_ip,server_port)
socket_tcp_server.bind(server_addr) #3.让默认的套接字由主动变为被动 listen
#监听套接字:负责等待新的各个客户端进行连接
socket_tcp_server.listen(128) #4.等待客户端的连接 accept
# 程序执行的到这里默认阻塞,当客户端连接服务端时,解阻塞
# accept 返回一个二元元组,第一个是新的套接字,第二个是客户端
# accept 负责产生新的套接字为客户端服务
while True:
print('等待一个新的客户端的到来...')
new_cilent_socket,cilent_addr=socket_tcp_server.accept()
#accept返回的新socket包括四部分:源IP、源端口号、目的IP、目的端口号,这个四元组确定一个套接字
#仔细观察可以发现对应于每个客户端的新分配的socket的源IP和源端口号是一样的,目的IP和目的端口号是不一样的
#四元组一个不一样,就是一个不同的socket
#具体见 https://blog.csdn.net/woxiaohahaa/article/details/78038442
print('新分配的套接字: ',new_cilent_socket)
print('一个新的客户端已经到来%s'%str(cilent_addr))
while True: #循坏多次,为同一个客户端服务多次
#使用新分配的套接字,接收客户端发送过来的请求
#如果recv阻塞,两种方式解阻塞:
#1.客户端发送过来数据
#2.客户端调用close导致
try:
recv_data=new_cilent_socket.recv(1024) #接收到普通数据
except:
break
print('客户端发送过来的请求是:%s'%recv_data.decode('utf-8'))
#如果客户机不需要服务了,当客户端socket.close()执行时,服务器套接字的消息会为空(recv解阻塞)
#回送部分数据给客户端
new_cilent_socket.send('-------ok-------'.encode('utf-8'))
#关闭套接字
new_cilent_socket.close()
print('%d号客户机已经服务完毕!'%num)
num+=1
#关闭套接字
socket_tcp_server.close() if __name__=='__main__':
server()
2.Python网络编程_TCP(简略版)的更多相关文章
- 1.Python网络编程_UDP(简略版)
# -*- coding: utf-8 -*- #2019-11-24 import socket def recv(): udp_socket=socket.socket(socket.AF_INE ...
- python 网络编程第四版
使用SocketServer 模块来完成服务端编程 1.服务端代码如下: #!/usr/bin/python #!coding:utf-8 import SocketServer as sockets ...
- python 网络编程第三版
为服务端增加多线程解决方案 1.服务端代码如下: ***这个版本并没有真正的起到多线程的作用,主要原因在于t.join():以后的版本会改进这个问题*** #!/usr/bin/python #!co ...
- Python网络编程基础 PDF 完整超清版|网盘链接内附提取码下载|
点此获取下载地址提取码:y9u5 Python网络编程最好新手入门书籍!175个详细案例,事实胜于雄辩,Sockets.DNS.Web Service.FTP.Email.SMTP.POP.IMAP. ...
- Python网络编程基础pdf
Python网络编程基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1VGwGtMSZbE0bSZe-MBl6qA 提取码:mert 复制这段内容后打开百度网盘手 ...
- python网络聊天器多线程版
在之前的一篇文章(python网络编程-udp)中实现了一个简单的udp聊天器,只能在单线程下进行收发数据,在学习完多线程之后,实现一个能同时收发数据的udp聊天器. 说明: 编写一个有2个线程的程序 ...
- Python网络编程(一)
最近在啃<python核心编程(第三版)>,感觉这本书并不是特别的友好,虽然有基于python3提出的改进代码:但是整书的基准感觉还是在python2.7.所以python3的代码中还是有 ...
- 28、Python网络编程
一.基于TCP协议的socket套接字编程 1.套接字工作流程 先从服务器端说起.服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客 ...
- 图解Python网络编程
返回目录 本篇索引 (1)基本原理 (2)socket模块 (3)select模块 (4)asyncore模块 (5)asynchat模块 (6)socketserver模块 (1)基本原理 本篇指的 ...
随机推荐
- [20191031]完善vim的bccalc插件7.txt
[20191031]完善vim的bccalc插件7.txt --//增加/ 2^16 %2^16功能,输入\tx,例子:1398145029 = /2^16 %2^16 (type and mode ...
- 201871010126 王亚涛 《面向对象程序设计(java)》 第一周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/wyt0455820/ ...
- AcWing 45. 之字形打印二叉树
地址 https://www.acwing.com/problem/content/description/43/ 题目描述请实现一个函数按照之字形顺序从上向下打印二叉树. 即第一行按照从左到右的顺序 ...
- acwing 70-72 剑指OFFER 二叉树相关
地址 https://www.acwing.com/problem/content/66/ https://www.acwing.com/problem/content/67/ https://www ...
- [译]ABP v1.0终于发布了!
ABP v1.0终于发布了! 今天是个大日子!经过约3年的不断开发,第一个稳定的ABP版本,1.0,已经发布了.感谢为该项目做出贡献或试用过的每个人. 立即开始使用新的ABP框架:abp.io/get ...
- word文档操作-doc转docx、合并多个docx
前言: 临时来了一条新的需求:多个doc文档进行合并. 在网上苦苦搜罗了很久才找到可用的文件(原文出处到不到了 所以暂时不能加链接地址了),现在记录下留给有需要的人. 一:doc转docx 所需jar ...
- angularjs中ng-class常用写法,三元表达式、评估表达式与对象写法
壹 ❀ 引 ng-class可以说在angularjs样式开发中使用频率特别高了,这不我想利用ng-class的三元运算符的写法来定义一个样式,结果怎么都想不起来正确写法,恼羞成怒还是整理一遍吧,那 ...
- 『嗨威说』算法设计与分析 - 回溯法思想小结(USACO-cha1-sec1.5 Checker Challenge 八皇后升级版)
本文索引目录: 一.回溯算法的基本思想以及个人理解 二.“子集和”问题的解空间结构和约束函数 三.一道经典回溯法题点拨升华回溯法思想 四.结对编程情况 一.回溯算法的基本思想以及个人理解: 1.1 基 ...
- SqlServer ----- 根据查询语句创建视图
我们都知道视图的本质就是查询语句,那么就可以根据查询语句创建视图, 前提 知道视图的组成,已经写好的sql 语句,多表或单表的查询语句,将查询语句变成视图. 所以视图可以由单表,多表或视图加表构成. ...
- vue记事2
1.vue2父子组件双向数据传递 https://segmentfault.com/a/1190000011783590 2.vue父组件通过props向子组件传递方法的方式 https://segm ...