TCP客户端及服务器端开发实践

一、TCP客户端及服务器端开发实践

1、TCP网络应用程序开发分类

① TCP客户端应用程序开发

② TCP服务器端应用程序开发

客户端程序是指运行在用户设备上的程序,服务端程序是指运行在服务器设备上的程序,专门为客户端提供数据服务。那如何记忆呢?

主动发起建立连接请求的是客户端程序,等待接受连接请求的是服务端程序。

2、TCP客户端程序开发流程及应用实践(五步走)

开发流程介绍

 socket类的介绍

① 导入socket模块
import socket
​
② 创建客户端socket对象使用socket类
socket.socket(AddressFamily, Type)

客户端socket类的参数和方法说明:

参数名 说明
AddressFamily IP地址类型, 分为IPv4和IPv6
Type 传输协议类型

开发客户端需要使用的函数:

 

TCP客户端程序开发实践

import socket

if __name__ == '__main__':
    # 1、创建客户端套接字对象
    tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 2、和服务器端套接字建立连接(参数必须是一个元祖)
    tcp_client_socket.connect(("192.168.31.181", 8080))
    # 3、发送数据
    tcp_client_socket.send('hell, itheima'.encode(encoding='utf-8'))
    # 4、接收数据
    recv_data = tcp_client_socket.recv(1024).decode('utf-8')
    print(recv_data)
    # 5、关闭客户端套接字
    tcp_client_socket.close()

3、TCP服务器端开发流程及应用实践(七步走)

服务器端

开发流程介绍

 

 socket类的介绍

① 导入socket模块
import socket
​
② 创建客户端socket对象使用socket类
socket.socket(AddressFamily, Type)

客户端socket类的参数和方法说明:

参数名 说明
AddressFamily IP地址类型, 分为TPv4和IPv6
Type 传输协议类型

开发客户端需要使用的函数:

① 导入socket模块
import socket
​
② 创建服务器端socket对象使用socket类
socket.socket(AddressFamily, Type)

客户端socket类的参数和方法说明:

参数名 说明
AddressFamily IP地址类型, 分为TPv4和IPv6
Type 传输协议类型

开发服务器端需要使用的函数:

方法名 说明
bind 绑定IP地址和端口号
listen 设置监听
accept 等待接受客户端的连接请求
send 发送数据
recv 接收数据

 

 

TCP服务器端程序开发实践

import socket

if __name__ == '__main__':
    # 1、创建服务器端套接字对象
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 2、绑定IP地址与端口号
    tcp_server_socket.bind(("", 8888))
    # 3、开启监听
    tcp_server_socket.listen(128)
    # 4、等待接收客户端连接请求
    conn_socket, ip_port = tcp_server_socket.accept()
    print('客户端IP+端口:', ip_port)
    # 5、接收数据
    recv_data = conn_socket.recv(1024)
    print('接收到的数据:', recv_data.decode())
    # 6、发送数据
    conn_socket.send("客户端的数据已经收到了".encode())
    # 7、关闭套接字
    conn_socket.close()
    tcp_server_socket.close()

4、TCP服务器端开发面向对象版本

# 导入模块
import socket

# 创建一个WebServer服务器端类
class WebServer(object):
    # 定义__init__()魔术方法,用于对象初始化
    def __init__(self):
        # 创建套接字对象
        self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 绑定IP与端口号
        self.tcp_server_socket.bind(("", 8090))
        # 设置监听
        self.tcp_server_socket.listen(128)

    # 定义一个handle_client_request()
    def handle_client_request(self, new_socket, ip_port):
        # 接收客户端消息
        recv_data = new_socket.recv(1024)
        recv_data = recv_data.decode('gbk')
        print(f'{ip_port}客户端发送过来的消息:{recv_data}')

        # 返回(发送)消息给客户端
        content = '信息已收到,over,over!'.encode('gbk')
        new_socket.send(content)

        # 处理完成后,关闭新套接字对象
        # new_socket.close()


    # 定义一个start方法,用于启动WebServer,接收客户端连接
    def start(self):
        while True:
            # 等待客户端连接
            new_socket, ip_port = self.tcp_server_socket.accept()
            # 定义一个方法,用于接收和发送消息
            self.handle_client_request(new_socket, ip_port)


# 创建程序执行入口,实例化WebServer类生成对象
if __name__ == '__main__':
    # 实例化对象
    ws = WebServer()
    # 调用自身方法,用于启动服务
    ws.start()

5、扩展:TCP服务器端开发之多客户端

# 导入模块
import socket

# 1、创建套接字对象
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2、绑定IP与端口
tcp_server_socket.bind(("", 8090))
# 3、设置监听
tcp_server_socket.listen(128)
# 4、等待客户端连接
while True:
    # 使用try...except捕获连接异常
    try:
        new_socket, ip_port = tcp_server_socket.accept()
        while True:
            try:
                # 5、接收客户端发送过来的消息
                recv_data = new_socket.recv(1024)

                recv_data = recv_data.decode('gbk')
                print(f'{ip_port}:{recv_data}')

                content = input('服务器端消息:').encode('gbk')
                new_socket.send(content)

            except ConnectionResetError:
                print(f'{ip_port}客户端连接已经断开')
                break
    except:
        print('出错,退出服务器监听')
        break

# 关闭套接字对象
tcp_server_socket.close()

相关推荐

  1. mac tcp实现客户服务进行图像传输处理

    2024-04-05 10:40:03       13 阅读
  2. netty的TCP服务客户实现

    2024-04-05 10:40:03       27 阅读
  3. Python网络编程实战:构建TCP服务器客户

    2024-04-05 10:40:03       14 阅读
  4. Python中TCP服务器客户的简易实现

    2024-04-05 10:40:03       12 阅读
  5. go实现tcp客户

    2024-04-05 10:40:03       22 阅读
  6. C++客户服务器TCP创建

    2024-04-05 10:40:03       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-05 10:40:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-05 10:40:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-05 10:40:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-05 10:40:03       20 阅读

热门阅读

  1. UDP和TCP之间的对比

    2024-04-05 10:40:03       12 阅读
  2. Rocky Linux 基本环境配置

    2024-04-05 10:40:03       11 阅读
  3. 如何快速入门TensorFlow

    2024-04-05 10:40:03       15 阅读
  4. 5.110 BCC工具之btrfsslower.py解读

    2024-04-05 10:40:03       13 阅读
  5. 【C/C++】C语言实现顺序栈

    2024-04-05 10:40:03       11 阅读
  6. VR版GPT可以在苹果Vision Pro上开发一个

    2024-04-05 10:40:03       10 阅读
  7. 设计模式:枚举如何实现单例模式

    2024-04-05 10:40:03       13 阅读
  8. 【C语言】单表交换密码的加密解密

    2024-04-05 10:40:03       12 阅读
  9. C语言关于随机数知识点的总结

    2024-04-05 10:40:03       13 阅读
  10. 01 计算机网络发展与分类

    2024-04-05 10:40:03       13 阅读
  11. 快速排序和归并排序(递归实现)

    2024-04-05 10:40:03       15 阅读
  12. 如何正确使用reflect:Go反射规范与最佳实践

    2024-04-05 10:40:03       14 阅读