传输层tcp协议以及scoket套字节方法

一、传输层

1、传输层的由来:

网络层的IP帮我们区分子网

以太网的Mac帮我们找到主机

所以通过IP和Mac找到了一台特定的主机

 

如何找到该特定主机的应用程序呢?

答案是通过端口,端口即应用程序与网卡关联的编号

2、传输层的功能:

建立端口与端口的通信

补充:端口范围0-65535 ,0-1023为系统占用端口

 

二、TCP协议

又称为好人协议以及可靠协议

tcp是可靠的数据传输:

最可靠的方式就是得不到确认,就重新发送数据报,知道得到对方的确认为止

TCP建立了一个双向通路,实现了数据的三次握手和四次挥手

 

三、socket介绍

定义:

socket是应用层与TCP/IP协议族通信的中间软件抽象,他是一组接口。

 

服务端套接字函数

s.bind()绑定(主机、端口号)到套字节

s.listen()开始TCP监听

s.accept()被动接受TCP客户的连接,(阻塞式)等待连接的到来

 

客户端套字节函数

s.connect()主动初始化TCP服务器连接

 

公共用途的套字节函数

s.recv()接收数据

s.send()发送数据

s.sendall()发送完整数据

s.close()关闭套字节

                             

四、简单远程执行命令程序的开发
#客户端
import socket

phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话
phone.bind(('127.0.0.1',8081)) #插手机卡,补充:0-65535 0-1024给系统用的
phone.listen(5) # 开机

print('start...')
conn,client_addr=phone.accept() # 等电话连接
print('连接来了:',conn,client_addr)

# 收发消息
msg=conn.recv(1024) #收消息,1024是一个最大的限制
print('客户端的消息: ',msg)
conn.send(msg+b'SB')


# 挂电话
conn.close()
# 关机
phone.close()


#服务端
import socket

phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话
phone.connect(('127.0.0.1',8081)) # 拨电话,地址为服务端的ip和端口

phone.send('你好'.encode('utf-8')) # 发消息b'hello'
data=phone.recv(1024) #收消息

print(data.decode('utf-8'))

五、加上通讯循环与连接循环

#服务端
import socket

phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.bind(('127.0.0.1',8081))
phone.listen(5)

print('start...')
while True: # 连接循环
    conn,client_addr=phone.accept()
    print('客户端 ',client_addr)

    while True: # 通信循环
        try:
            msg=conn.recv(1024)
            print('客户端的消息: ',msg)
            conn.send(msg+b'SB')
        except ConnectionResetError:
            break
    conn.close()
phone.close()

#客户端1
mport socket

phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话
phone.connect(('127.0.0.1',8081)) # 拨电话,地址为服务端的ip和端口

while True:
    msg=input('>>>: ').strip()
    phone.send(msg.encode('utf-8')) # 发消息b'hello'
    data=phone.recv(1024) #收消息

    print(data.decode('utf-8'))

phone.close()


#客户端2
mport socket

phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话
phone.connect(('127.0.0.1',8081)) # 拨电话,地址为服务端的ip和端口

while True:
    msg=input('>>>: ').strip()
    phone.send(msg.encode('utf-8')) # 发消息b'hello'
    data=phone.recv(1024) #收消息

    print(data.decode('utf-8'))

phone.close()

#客户端3、4.........

 

    

 

转载于:https://www.cnblogs.com/sui776265233/p/8883253.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值