recv

套接字中的TCP协议

我的未来我决定 提交于 2019-11-26 14:38:29
socket(套接字) 本地回环地址 127.0.0.1 我们先来写一个简单地服务器和客户端 服务端 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import socket ​ server = socket.socket() # 就比如买了一个手机 server.bind(( "127.0.0.1" , 8080 )) # bind中绑定的是IP地址和端口号,注意是一个元组,就比如,将手机卡,插入了手机 server.listen( 5 ) # 半连接池,最大等待连接数为5个,就比如开机 conn,address = server.accept() # 接听电话等着别人给你打电话 ​ date = conn.recv( 1024 ) # 听别人说话,接收1023个字节数 print (date) conn.send(b "hello" ) # 给别人回话 ​ ​ conn.close() # 挂断电话 server.close() # 关机 客户端 ? 1 2 3 4 5 6 7 8 9 10 11 import socket ​ client = socket.socket() #拿电话 client.connect(( "127.0.0.1" , 8080 )) #绑定的是IP地址和端口号,也是一个元组 拨号 ​ client.send(b

socket

江枫思渺然 提交于 2019-11-26 14:35:39
1、socket概念 图片位置 2、理解socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。 2.1站在人的角度看待socket模块 socket就是一个模块。通过调用模块中已经实现的方法建立两个进程之间的连接和通信。要确定一个计算机要有ip地址和port端口,因此socket也可以说成ip+port。 因为ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序。 所以我们只要确立了ip和port就能找到一个应用程序,并且使用socket模块来与之通信。 3、套接字(socket)的发展史 基于文件型的和基于网络型 3.1基于文件类型的套接字家族:AF_UNIX 套接字家族的名字:AF_UNIX unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信 3.2 基于网络类型的套接字家族名字:AF_INET (还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现

网络编程之Tcp,udp

霸气de小男生 提交于 2019-11-26 14:29:43
1.TCP 2.补充异常处理 3.UDP 一TCP. 1.socket基础版本通讯 服务端: 1 import socket 2 3 server = socket.socket()# 生成一个对象 4 server.bind(('127.0.0.1',8080))# 绑定ip和端口 5 server.listen(5)# 连接池 6 7 conn,addr = server.accept()# 等待别人 一个是ip 一个是地址 阻塞 8 data = conn.recv(1024) # 听别人说话 阻塞 9 print(data) 10 conn.send(b'hello boby')# 给对方回信息 11 12 conn.close()# 断开链接 13 server.close()# 结束掉进程 View Code 客户端: 1 import socket 2 3 4 client = socket.socket()# 生成一个对象 5 6 client.connect(('127.0.0.1',8080))# 发送你的ip和端口号 7 8 client.send(b'hello word')# 对别人说话 9 data = client.recv(1024) # 听别人说话 10 print(data) 11 12 client.close()# 断开链接 View

基于TCP & UDP 协议的 socket 通信

本秂侑毒 提交于 2019-11-26 14:21:51
socket 通信   TCP版本: # 最终版本,解决了 TCP 协议中的粘包问题 # 客户端 import socket import struct import json client = socket.socket() # 先生成一个客户端对象 client.connect(('127.0.0.1', 8080)) # 绑定服务端 # 里面接收一个值 - 元祖 元祖里面传两个值,分别为IP地址以及端口号 while True: msg = input('>>> ').strip().encode('utf-8') # 首先输入命令,并且转化为字节 if len(msg) == 0: continue # 如果字节长度为0 ,说明没有内容传入,就结束本次循环,重新输入指令 client.send(msg) # 接收服务端传来的字典报头 d_head = client.recv(4) # 解析字典报头,获取字典长度信息 d_len = struct.unpack('i', d_head)[0] # 解析报头必须后面添加索引[0] # 接收字典数据,并反序列化字典 d_bytes_data = client.recv(d_len) d = json.loads(d_bytes_data) # 接收真实结果 real_data = b'' recv_size = 0 while

网络编程之socket

蹲街弑〆低调 提交于 2019-11-26 14:07:36
1,socket 通信 ##服务端: import socket server = socket.socket() server.bind(('127.0.0.1,8080)) server.listen(5) conn, addr = server.accept() data = conn.recv(1024) print(data) conn.send("hello") conn.close() server.close() /*--> */ /*--> */ import socket ## 客户端 client = socket.socket() client.connect(( '127.0.0.1', 8080)) while True: msg = input( '>>>:').encode( 'utf-8') if len(msg) == 0: continue client.send(msg) data = client.recv( 1024) print (data) 2, 连接循环+ 通信循环 import socket """ 服务端 固定的ip和port 24小时不间断提供服务 """ server = socket.socket() # 生成一个对象 server.bind(('127.0.0.1',8080)) # 绑定ip和port server

网络编程的粘包

為{幸葍}努か 提交于 2019-11-26 14:05:50
粘包处理 客户端粘包: 发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据量很小,TCP优化算法会当做一个包发出去,产生粘包) 服务端粘包 接收方不及时接收缓冲区的包,造成多个包接收(客户端发送了一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包)   所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。 解决方法:(发送一个报头告诉对方我要发的有送多大) 先说下连接循环和通信循环 # 服务端 连接循环+通信循环 import scoket server = socket.socket() server.bind(('127.0.0.1',8686)) # 本地回环地址 server.listen(5) # 半连接池 除了正在服务的 还有五个等待连接 while True: # 连接循环 conn, addr = server.accept() # conn 是双向连接通道 套接字的对象 addr是客户端地址 while True: # 通信循环 try: date = conn.recv(1024) # 等待接收1024字节 ptint(date.decode('utf-8')) if len(date) == 0:break conn.send(date.upper()) #

基于TCP协议和UDP协议的socket套接字使用

让人想犯罪 __ 提交于 2019-11-26 14:03:20
一,基于TCP协议socket使用: server端import socket server = socket.socket() server.bind(('127.0.0.1',8080)) #绑定IP地址和端口号 server.listen(5) #设置监听数 while True: conn,addr = server.accpet() #建立通道 while True: try: data = conn.recv(1024) #接受客户端消息 if len(data) == 0:break data = data.decode('utf-8') #解码接受到的消息 conn.send(b'hi') except ConnectionResetError: break conn.colse() client端 import socket client = socket.socket client.connet(('127.0.0.1',8080))#连接服务器 while True: msg = input('>>>>:').encode('utf-8') if len(msg) == 0:continue client.send(msg)#发送消息 data = client.recv(1024) 二,基于UDP协议使用socket server 端 import

socket套接字

好久不见. 提交于 2019-11-26 14:02:03
1、socket概念 图片位置 2、理解socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。 2.1站在人的角度看待socket模块 socket就是一个模块。通过调用模块中已经实现的方法建立两个进程之间的连接和通信。要确定一个计算机要有ip地址和port端口,因此socket也可以说成ip+port。 因为ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序。 所以我们只要确立了ip和port就能找到一个应用程序,并且使用socket模块来与之通信。 3、套接字(socket)的发展史 基于文件型的和基于网络型 3.1基于文件类型的套接字家族:AF_UNIX 套接字家族的名字:AF_UNIX unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信 3.2 基于网络类型的套接字家族名字:AF_INET (还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现

socket模块

故事扮演 提交于 2019-11-26 11:12:07
简介 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。socket通常被叫做“套接字”,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。python中socket模块为操作系统的socket实现提供了一个python接口。 s=socket.socket(family,type)的实例方法 (1) s.bind((address,port)) 将socket绑定到一个地址和端口上,通常用于socket服务端 address必须是一个双元素元组,((host,port)),主机名或者IP地址+端口号。如果端口号正在被使用或者主机名或IP地址错误,则引发socket.error异常。 端口号的使用是有限制的,在linux或者unix之中只有系统管理员才能使用1024以下的端口,这些端口号用于标准服务。 s.accept() 返回一个客户机socket,带有客户机端的地址信息。 调用accept方法的时候,socket会进入阻塞状态。客户请求连接时,方法建立连接并返回服务器。 accept方法返回一个双元素元组,形如(connection,address)

socket(套接字) - 解决粘包问题 # 28

走远了吗. 提交于 2019-11-26 10:59:10
TCP协议类似打电话UDP协议类似发短信今日内容:1."socket" 套接字 1 """ 2 socket套接字 3 """ 4 1.127.0.0.1本机回环地址, 5 只能识别自己,其他人无法访问 6 2.send与recv对应, 7 不要出现两边都是相同的情况 8 3.recv是跟内存要数据, 9 至于数据的来源,你无需考虑 10 4.TCP特点:(自动优化机制) 11 会将数据量较小的并且时间间隔较短的数据,打包好,一次性发送给对方(造成粘包的原因之一) 12 13 重点************* 14 1.socket简单版本: 15 服务器: 16 import socket 17 # 1.买手机,创建一个对象 18 server = socket.socket() 19 # 2.插卡 ,绑定IP+port 20 server.bind(("127.0.0.1",8089)) 21 # 3.监听电话 22 server.listen() # 参数为半连接数,为了保护传输路径 23 # 4.拨打电话 ,建立连接,获取连接地址和用户 24 client,addr = server.accpet() 25 # 5.通话,听,收 26 date = client.recv(1024) 27 date = date.decode('utf-8') 28 print(date)