Python socket/TCP服务端/TCP客户端套接字编程,设置监听套接字,消息收发

Python socket/TCP服务端/TCP客户端套接字编程,设置监听套接字,消息收发

socket套接字编程

目标:根据socket模块提供的接口函数,进行组合使用完成基于TCP或者UDP的网路编程

套接字:完成上述目标的一种编程手段,编程方案

套接字分类

流式套接字(SOCK_STREAM):传输层基于TCP协议的套接字编程方案。

数据报套接字(SOCK_DGRAM):传输层基于UDP协议的套接字编程方案。

底层套接字(SOCK_RAM):访问底层协议的套接字编程

面向连接的传输--TCP协议--可靠的--流式套接字

面向无连接传输--UDP协议--不可靠--数据报套接字


TCP套接字服务端编程

import socket

1.创建套接字

sockfd = 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.绑定服务端地址

sockfd.bind(addr) #绑定IP地址,无返回值

addr:元组,(ip, port)

localhost 可以被本机用 127.0.0.1

127.0.0.1 同上

192.168.205.127 可以被所有人用192.168.205.127访问

0.0.0.0 可以被别人用192.168.205.127访问,也可以自己用127.0.0.1访问

3.设置监听套接字(只有TCP才需要这一步)

sockfd.listen(n) #将套接字设置为监听套接字,创建监听队列

n:表示监听队列大小

一个监听套接字可以连接多个客户端套接字

4.等待处理客户端连接请求

connfd, addr = dockfd.accept() #阻塞等待处理客户端连接

返回值: connfd 客户端连接套接字

addr 连接的客户端地址

阻塞函数:程序运行过程中遇到阻塞函数则暂停运行,直到某种阻塞条件达到再继续运行,如:input,sleep等

5.消息收发

data = connfd.recv(buffersize) #接收对应客户端消息

buffersize:一次最多接收多少字节

返回值:接收到的内容的bytes格式

如果没有消息则会阻塞

n = connfd.send(data) #发送消息给对应客户端

data:要发送的内容,必须是bytes格式

返回值:返回实际发送消息的大小

6.关闭套接字

sockfd.close() #关闭套接字


TCP客户端编程

1.创建套接字

必须相同类型的套接字才能通信

2.建立连接

sockfd.connect(server_addr) #建立连接

server_addr:元组,服务端地址,如:

3.消息收发

消息收发要和服务端配合,避免两边都出现recv阻塞

4.关闭套接字


最后编辑于:2019/10/14作者: 牛逼PHP

发表评论