python服务端编程_【Python高级编程024 ● 网络编程 ● TCP服务端程序开发】

"""一、TCP服务端程序开发步骤

1、导入socket模块

2、创建TCP套接字‘socket’

参数1: ‘AF_INET’, 表示IPv4地址类型

参数2: ‘SOCK_STREAM’, 表示TCP传输协议类型

3、设置端口复用

# 参数1: 表示当前套接字

# 参数2: 设置端口号复用选项

# 参数3: 设置端口号复用选项对应的值

setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)

4、绑定端口号‘bind’

参数: 元组, 比如:(ip地址, 端口号)

5、设置监听‘listen’

参数: 最大等待建立连接的个数

6、等待接受客户端的连接请求‘accept’

7、接收数据‘recv’

参数: 表示每次接收数据的大小,单位是字节,注意: 解码成字符串使用decode()方法

8、发送数据‘send’

参数: 要发送的二进制数据, 注意: 字符串需要使用encode()方法进行编码

9、关闭套接字‘socket’表示通信完成

二、socket类的介绍

1、导入socket模块

import socket

2、创建服务端socket对象

socket.socket(AddressFamily, Type)

3、参数说明:

AddressFamily:表示IP地址类型, 分为TPv4和IPv6

Type:表示传输协议类型

4、方法说明:

bind((host, port)):表示绑定端口号, host是ip地址,port是端口号,

ip地址一般不指定,表示本机的任何一个ip地址都可以

listen (backlog):表示设置监听,backlog参数表示最大等待建立连接的个数

accept():表示等待接受客户端的连接请求

send(data):表示发送数据,data 是二进制数据

recv(buffersize):表示接收数据, buffersize是每次接收数据的长度

三、端口占用说明

当客户端和服务端建立连接后,服务端程序退出后端口号不会立即释放,需要等待大概1-2分钟。

解决办法有两种:

1、更换服务端端口号

2、设置端口号复用(推荐大家使用),也就是说让服务端程序退出后端口号立即释放。

设置端口号复用的代码如下:

# 参数1: 表示当前套接字

# 参数2: 设置端口号复用选项

# 参数3: 设置端口号复用选项对应的值

tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)"""

#1、导入socket模块

importsocketif __name__ == '__main__':#2、创建tcp服务端套接字对象

tcp_sever_socket =socket.socket(socket.AF_INET, socket.SOCK_STREAM)#3、设置端口号复用,通俗理解程序退出端口号立即释

#3.1 SOL_SOCKET表示当前套接字

#3.2 SO_REUSEADDR表示复用选项

#3.3 是否复用,True表示复用

tcp_sever_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)#4、绑定服务端端口号,"": 表示本机的任何一个ip都可以, 8989:端口号

tcp_sever_socket.bind(("", 9090))#5、设置监听, 128:表示最大等待的连接个数

tcp_sever_socket.listen(128)#6、等待接收客户的连接请求

new_socket, ip_port =tcp_sever_socket.accept()print("new_socket:", new_socket)print("客户端的ip地址和端口号为:", ip_port)#代码执行到此,说明客户端和服务端套接字建立连接成功

#7、接收数据

recv_data = new_socket.recv(1024)#打印接收数据的长度

print("接收数据的长度:", len(recv_data))#对二进制数据进行解码

recv_content = recv_data.decode("utf-8")print("接收的客户端数据:", recv_content)#8、发送数据

#content = input("请输入你要发送的数据:")

content = "我是服务端"

#对字符串进行编码

send_data = content.encode("utf-8")#发送数据给客户端

new_socket.send(send_data)#9、关闭套接字socket

#关闭和客户端通信的socket

new_socket.close()#服务端的套接字关闭,不在提供连接服务

tcp_sever_socket.close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值