PYTHON3里面的SOCKET编程

1 篇文章 0 订阅
0 篇文章 0 订阅

  本文主要内容为python3的基于TCP的socket编程。作者使用的python版本为python3.6。
  基于TCP的SOCKET编程
  1了解TCP
  TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。其特点在于:
    ①有序性:为数据包编排序号
    ②正确性:checksum函数检验数据是否出错
    ③可靠性:超时重传、错误重传、丢失重传
    ④可控性:滑动窗口协议和拥塞控制协议
  TCP协议建立连接一般要经过三次握手:
   ①客户端发送SYN包到服务器端,客户端状态变为SYN_SENT
   ②服务器接收到SYN包并发送SYN+ACK包到客户端,服务器端状态变为SYN_RECV
   ③客户端接收SYN_ACK数据包并发送ACK包到服务器,两者状态变为ESTABLISHED,此时连接完成
  断开连接时只需任何一方发起关闭连接请求,此时又分为四个部分,例如(C-Client,S-Server)C向S发起关闭请求:
  ①C发送FIN标记的报文
  ②S接收报文并发送ACK确认包,同时通知自己相关程序开始清理数据
  ③数据清理完成后,S发送FIN报文段
  ④C接收FIN报文并发送ACK包,连接释放
  2程序实现
  服务器端实现:

#-*- coding:utf8 -*-
  import socket
  import datetime

  HOST = '0.0.0.0'   #表示监听所有IP请求
  PORT = 3434      #表示监听端口3434

  #AF_INET表示IPv4地址,SOCK_STREAM表示使用TCP协议,SOCK_DGRAM表示UDP
  s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  s.bind((HOST,PORT))      #端口绑定
  s.listen(1)                         #始监听
  while True:
       socketBack,addr = s.accept()    #accept函数接受连接并返回一个socket和一个地址段#
       print('Client %s is connected!' % str(addr))
      dt = datetime.datetime.now()
       message = "Time: "+ str(dt) #获取当前时间信息

       socketBack.sendall(message.encode())  #sendall()函数发送信息,记得一定要调用encode()函数编码,因为sendall/send函数只接受byte数据,encode函数可以完成将目标编码为byte#
       print('Message Sent!')
       socketBack.close()  #关闭连接
  客户端实现:
import socket

HOST = 'xxx.xxx.xxx.xxx' #本机ip
PORT = 3434

#AF_INET表示IPv4地址,SOCK_STREAM表示TCP协议
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.settimeout(1)      #1s未连接则超时
ret = s.connect_ex((HOST,PORT))
if str(ret) != '0':
    print('Error! Link Failed! Check your HOST AND PORT!')
else:
    print('')
    print('Connect %s:%d ok!'% (HOST,PORT))
    data = s.recv(1024).decode() #注意此处也要相应解码
    print('Received: %s' % data)
    s.close()

以上就是基于TCP和python3的SOCKET编程实现,基于UDP实现,理论上较TCP简单很多。UDP无需建立连接,直接发送和接收即可。具体为服务器端绑定IP和端口后,就不需要监听,直接在while True循环中使用:data,addr = s.recvfrom(1024)即可。
客户端也无需连接,直接发送数据即可,具体程序就请读者自行编写

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值