流式套接字(基于TCP)

本文介绍了基于TCP协议的流式套接字编程,包括服务端和客户端实现,强调了recv()和send()的特性。讨论了网络收发缓冲区的概念以及TCP粘包现象的原因和影响,并提供了处理粘包的方法。示例代码展示了如何创建一个能连续收发消息的TCP程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【流式套接字的编程(基于tcp协议的】

1.TCP服务端:

import socket

1.创建套接字
	socket.socket(socket_family=AF_INET,
			socket_type=SOCK_STREAM
			proto=0)
	功能:创建一个套接字
	参数:socket_family : 选择地址族类型AF_INET 使用IPV4
	      socket_type : 套接字类型 SOCK_STREAM流式套接字/ SOCK_DGRAM数据报套接字
	      proto : 子协议类型,没有子协议选择 0
	返回值:返回套接字对象

2.绑定地址(IP端口号)
	sockfd.bind()
	功能:绑定地址
	参数:一个二元元组(包含两项) 第一项为IP 第二项为端口号
				     ('172.60.50.50',8888)
3.将套接字设置可监听 
	sockfd.listen(n)
	功能:将套接字设置为监听套接字
	参数:n是一个正整数 表示监听等待队列的大小

4.等代接收连接请求
	connfd,addr = sockfd.accept()
	功能:阻塞等待处理客户端连接
	返回值:第一个:一个新的套接字,用来和客户端通信
	    第二个:连接的客户端的地址
	* 阻塞函数:程序运行到阻塞函数的位置,如果某种期待条件没有达成则暂停继续运行
		    当条件达成后会结束阻塞继续运行。
5.收发消息
	data = connfd.recv(buffersize)
		功能:流式套接字接收消息
		参数:一次最多接收多大的消息,字节
		返回值:返回接收到的内容
	n = connfd.send()
		功能:流式套接字发送消息
		参数:要发送的内容,要求bytes格式
		返回值:返回实际发送的字节数

6.关闭套接字
	close()
		功能:关闭套接字 tcp套接字连接断开

2.tcp客户端

1.创建套接字
	socket()
2.请求连接
	connect()
	功能:发起连接请求
	参数:是一个元组,表示服务器的地址
	
3.消息收发
	recv()  send() # 客户端先发消息
4.关闭套接字			
	close

3.recv()/send()特性:

recv()特性

  1. 如果连接双方断开连接,则recv会立即结束阻塞返回空字符串
  2. 当接收缓冲区为空的时候会阻塞
  3. 如果recv一次接收不完缓存区内容,下一次会继续接收

send()特性:
4. 如果一端不存在,另一端还在试图send操作时会产生BrokenPipeError异常
5. 当发送缓冲区慢的时候会阻塞

4.具体代码:

tcp_server.py

from socket import *

# 创建套接字
sockfd = socket(AF_INET,SOCK_STREAM)

# 绑定地址
sockfd.bind(('127.0.0.1',8888))

# 设置监听
sockfd.listen(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值