您的位置:首页 > 理论基础 > 计算机网络

tcp套接字socket编程

2019-06-08 23:48 246 查看

套接字:进行网络通信的一种手段,socket

流式套接字(SOCK_STREAM):传输层基于tcp协议进行通信

数据报套接字(SOCK_DGRAM):传输层基于udp协议进行通信

原始套接字:访问底层协议的套接字

 

流式套接字:

TCP服务端

from socket import *

1、创建套接字

socket(scoket_family=AF_INET,socket_type=SOCK_STREAM,proto=0)

功能:创建套接字

参数:socket_family:选择地址族种类AF_INT(UNIX)

           socket_type:套接字类型SOCK_STREAM(流式),SOCK_DGRAM数据报

            proto:子协议类型默认为0

返回值:返回创建的套接字

2、绑定IP和端口号

sockfd.bind()

功能:绑定IP和端口

参数:是一个元组,第一项是字符串形式的IP,第二项是端口号

           ('192.168.1.2',8888)

3、让套接字具有监听功能

sockfd.listen(n)

功能:使套接字变为监听套接字,同时创建监听队列

参数:n监听队列大小

 

4、等待客户端连接

socket.accept()

功能:阻塞等待客户端连接

返回值:第一个:返回一个新的套接字用来和客户端通信

               第二个:返回连接的客户端的地址

5、消息的收发

recv(buffer)

功能:接受消息

参数:一次接受消息的大小 字节

返回值:接受到的内容 

send()

功能:发送消息

参数:发送的内容(byte)

返回值:发送了多少个字节

6、关闭套接字

close()

功能:关闭套接字

tcp客户端流程

1、创建流式套接字

2、发起连接请求

connect()

功能:发起连接

参数:一个元组 第一个元素:服务器的IP,第二个元素:服务器的port

3、收发消息

4、关闭套接字

 

关于recv和send

发送接受缓冲区:发送和接收消息均放到缓冲区再进行处理

recv接收消息当一次接受不完的时候会下次继续接收

当recv阻塞时,如果客户端断开,则recv立即返回一个空字符串

tcp粘包处理

tcp中数据以数据流的方式发送接收,每次发送的数据间没有边界,在接收时可能造成数据的粘连即使为粘包

粘包如何处理:

1、每次发送消息结束位置加标志

2、发送的消息添加结构描述

3、当连续发送时每次发送有一个短暂延迟sleep(0.1)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: