TCP 服务端/客户端

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它与UDP同在计算机网络OSI模型中同一层,处于网络层(IP层)之上,应用层之下
1、四层模型
在这里插入图片描述
2、Socket 抽象层
Socket 是TCP/IP协议族的通信的中间软件的抽象层,它是一组接口。对于我们无需深入了解TCP/IP协议,socket已经为我们封装好了,只需按照socket的规定去编程就行了。因此我们应该先学会socket 的用法。
socket 本质上是 ip +port,ip 是指网络上的哪一台主机,port是指定主机上的哪一个应用程序,这样就标识了网络中独一无二的一个应用程序,这样就可以实现网络上的互相通信。
3、socket 套字节的工作流程
在这里插入图片描述
从服务器端开始,服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据强求,服务器端接受请求并处理请求,然后把回应数据发送给客户,客户读取数据,最后关闭连接,一次交互就结束了。
4、基于socket TCP 服务端
基于socket TCP 服务端如下代码:

from socket import *                                    #引入socket模块
ip_port = ('192.168.42.42',8080)                #自定义ip/端口号
back_log = 5	                                            #自定义监听数
buffer_size = 1024                                       #自定义接受最大字节数

tcp_server = socket(AF_INET,SOCK_STREAM)           #创建服务器套字节,AF_INET是引用套字节家族,SOCK_STREAM是指套字节类型,ipv4
tcp_server.bind(ip_port)                                              #把地址绑定到套字节
tcp_server.listen(back_log)                                        #设置监听链接

while True:                                         #设置无限循环
    print('服务端开始运行了'),
    conn,addr = tcp_server.accept()                 #服务端  准备接受  新的套字节对象,可以用来接收和发送数据,addr 是连接客户端的地址
    print("接受新的套字节链接是",conn)
    print('客户端地址',addr)

    while True:
        data = conn.recv(buffer_size)                                           #收到的数据,是以buffer_size 的大小接收
        print('客户端发来的消息是',data.decode('utf-8'))              #收到的消息 data 并转码decode()
        conn.send(data.upper())          										#服务端  回复数据   将发送来的数据大写返回                              
    conn.close()                                                                       #套字节链接关闭
tcp_server.close()                                                            #服务器链接关闭

5、客户端
基于socket TCP 服务端如下代码:

from socket import *
ip_port = ('192.168.42.42',8080)                     # 地址跟服务端一样
back_log =  5
buffer_size = 1024

tcp_client = socket(AF_INET,SOCK_STREAM)
tcp_client.connect(ip_port)																			#连接服务端

while True:
    msg = input('>>:').strip()
    if not msg :continue                             #如果msg 为空的话结束本次循环
    tcp_client.send(msg.encode('utf-8'))     #发送访问数据
    print('客户端已经发送消息')
    data = tcp_client.recv(buffer_size)
    print("收到服务端发来的消息",data.decode('utf-8'))
tcp_client.close()

TCP是基于链接的 必须先启用服务端,然后再启动客户端去链接服务端。
这样就建立了基于socket建立的TCP协议客户端和服务端的连接。


自己整理,欢迎指正!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值