首页 > 其他分享 >TCP客户端及服务器端开发实践

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

时间:2024-04-04 21:31:15浏览次数:17  
标签:__ socket tcp TCP 客户端 recv 服务器端

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

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

① TCP客户端应用程序开发

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

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

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

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

开发流程介绍

 socket类的介绍

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

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

参数名说明
AddressFamilyIP地址类型, 分为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类的参数和方法说明:

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

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

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

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

参数名说明
AddressFamilyIP地址类型, 分为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()

标签:__,socket,tcp,TCP,客户端,recv,服务器端
From: https://blog.csdn.net/qq_55451220/article/details/137382857

相关文章

  • 推荐一款超好用的开源SSH客户端:WindTerm
    WindTerm是一个用于DevOps的更快更好的SSH/Te.net/Serial/Shell/SFTP客户端。WindTerm目前仍然处于起步阶段,所以更多功能期待未来开发版本!如果你想要一个高性能的文本编辑器,你可以试试作者开发的免费WindEdit编辑器。功能特色支持SSH、Telnet、Tcp、Shell、Serial支持......
  • 浅谈TCP(2):流量控制与拥塞控制
    上文浅谈TCP(1):状态机与重传机制介绍了TCP的状态机与重传机制。本文介绍流量控制(FlowControl,简称流控)与拥塞控制(CongestionControl)。TCP依此保障网络的QOS(QualityofService)。TCP的流量控制RTT算法根据前文对TCP超时重传机制的介绍,我们知道Timeout的设置对于重传非常重要:......
  • tcp gso和gro
    开关查看是否开启gsoethtool-kens33|grepgeneric-segmentation-offload查看是否开启groethtool-kens33|grepgeneric-receive-offload作用mss含义是,最大分段大小,即tcpdata字节数。tcp在3次握手时协商mss,协商结果是第2个包中的ackmss值。mss协商要求mtu至少减去I......
  • 网络基础二——传输层协议UDP与TCP
    九、传输层协议​传输层协议有UDP协议、TCP协议等;​两个远端机器通过使用"源IP",“源端口号”,“目的IP”,“目的端口号”,"协议号"来标识一次通信;9.1端口号的划分​0-1023:知名端口号,HTTP,HTTPS,FTP,SSH等应用层协议,他们的端口号都是固定的;如:ssh使用的是22号端口,ftp(rzsz使......
  • ffmpeg tcp/udp 拉流
    参考文章:ffmpeg命令分析-拉取TCP流FFmpeg实现rtp推流ffmpeg除了拉取rtsp,hsl等协议外,也支持直接通过tcp/udp推拉流url格式为udp://ip:port或tcp://ip:port注意:udp或tcp有主被动的概念:主动:自己作为客户端,从服务端拉流被动:自己作为服务端,等待客户端推流直接使用tcp/u......
  • 详解SSL证书系列(9)SSL客户端认证
    上一篇介绍了HTTPS和HTTP协议的区别,理解了HTTP加上加密处理和认证以及完整性保护后即是HTTPS,同时HTTPS也是身披SSL外壳的HTTP,那么SSL客户端认证是怎么回事呢?这篇文章我将带领大家来了解一下。某些Web页面只想让特定的人浏览,或者干脆仅本人可见,为达到这个目标,必不可少的就是认证......
  • 守望先锋/暴雪客户端下载卡45%和97%原因解决
    最近网瘾犯了想OW一把,就下回来玩玩,结果暴雪客户端一直显示updatingbattle.net...(99%)后来发现是原来卸载的时候留存的配置没有删干净。解决办法删除以下路径中的残留配置文件C:\ProgramData下,Battle.net,Battle.net_components,BlizzardEntertainmentC盘用户路径下,找到......
  • 什么是Socket连接?它与TCP连接有什么关系
    Socket是应用层与TCP/IP协议簇通信的中间软件抽象层,它是一组接口。主机A的应用程序必须通过Socket建立连接才能与主机B通信,而建立Socket连接需要底层TCP/IP协议来建立TCP连接建立TCP连接需要底层IP协议来寻址网络中的主机Socket连接它允许两个程序在不同计算机上通过网络进行......
  • TCP/IP 基础知识总结
    我们刚开始接触计算机网络最多的协议,莫属TCP/IP协议了,TCP/IP协议同时也是互联网中最著名的协议。TCP/IP的历史背景最初还没有TCP/IP协议的时候,也就是在20世纪60年代,许多国家和地区认识到通信技术的重要性。美国国防部希望能够研究一种即使通信线路被破坏也能够通过其他......
  • 下载安装 macOS 版本的 Windows 远程桌面客户端(Microsoft Remote Desktop)
    如果有非国区的账号,直接在商店中下载即可:https://apps.apple.com/us/app/microsoft-remote-desktop/id1295203466?mt=12国区是搜不到的,微软提供了beta版本下载:https://install.appcenter.ms/orgs/rdmacios-k2vy/apps/microsoft-remote-desktop-for-mac/distribution_groups/al......