Python中的TCP socket写法示例

 更新时间:2018年05月11日 11:23:03   作者:gaby_yan  
最近在学习脚本语言python,所以下面这篇文章主要给大家介绍了关于Python中TCP socket写法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们一起来看看吧

前言

本文主要介绍了关于Python中TCP socket的写法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

一、 服务器server的写法:

1. 创建 socket 套接字:

网络编程接口 socket(family = AF_INET , type = SOCKET_STREM,proto = 0, fileno = None)   提供了多种socket family。AF_INET 是默认的family,需要绑定IP和端口。 127.0.0.1是一个特殊的IP地址,表示本机地址。如果绑定到这个地址,客户端必须同时在本机运行才能连接,也就是说,外部的计算机无法连接进来。

不同的协议family使用的地址形式不同,通常来说我们使用的是AF_INET-----地址是以(IP,PORT)形式存。在type 类型,我们常用的有两种 SOCKET_STREM ,流式套接字,表示基于连接的TCP套接字,SOCKET_DGRAM, 数据报套接字,基于无连接的(UDP)接口。 如果不设定,默认就是 SOCKET_STREM 。

2. bind 绑定     

使用方法:socket.bind(address)  把套接字绑定在 address 上,address的形式 根据 family 来设定。不管是client还是server,创建socket的时候都是通过一个本地的文件来进行的。  

3. listen 监听      

使用方法:socket.listen([backlog])  使能 socket 接收连接请求,listen(self,backlog = None) ,backlog需要大于0,指定了可以缓存的连接请求的数量。

4. accept 接受请求连接

在等待一个即将来临的连接,会返回一个代表连接的新的socket,还会返回一个地址(host和port),可以用两个东西接收,前一个代表新的socket,后一个就是接收地址。

写的方法:connet_socket,client_addr = srv.accept() connet_socket就是新的socket,然后connet_socket开始接下来的传输。connet_socket,client_addr,前者表示接收的新的socket,后者就是地址,具体看程序第10行。

5. 接收数据  

使用方法:socket.recv(bufsize[,flags])  从 socket 中接收数据,返回的是 bytes ,是接收到的内容。bufsize指定了一次最多接收多少个数据,如果没有数据接收,程序会阻塞,一直到有数据或者远程终端断开连接.

6. 发送数据  

使用方法:socket.send(bytes[, flags])  你的socket必须和远程的socket建立了联系,返回值是发送的数量,可以判断你的数据是否发送完毕,如果没有,继续send余下来的数据

import socket
hostname = '127.0.0.1' #设置主机名
port = 6666  #设置端口号 要确保这个端口号没有被使用,可以在cmd里面查看
addr = (hostname,port)
srv = socket.socket() #创建一个socket
srv.bind(addr)
srv.listen(5)
print("waitting connect")
while True:
 connect_socket,client_addr = srv.accept()
 print(client_addr)
 recevent = connect_socket.recv(1024)
 print(str(recevent,encoding='gbk'))
 connect_socket.send.send(bytes("你好,数据传输完成,这里是gaby-yan--server",encoding='gbk'))
 connect_socket.close()

二、 客户端client的写法:

客户端的写法相对比较简单,只有

1.创建socket  

2. 建立连接 connect  

3. 发送 send  

4. 接收recv  

这是由于他们的传递编程框架不同造成的,如图。

 

import socket
hostname = '127.0.0.1'
port = 7777
addr = (hostname,port)

clientsock = socket.socket() ## 创建一个socket
clientsock.connect(addr) # 建立连接

say = input("输入你想传送的消息:")
clientsock.send(bytes(say,encoding='gbk')) #发送消息
recvdata = clientsock.recv(1024)  #接收消息 recvdata 是bytes形式的
print(str(recvdata,encoding='gbk')) # 我们看不懂bytes,所以转化为 str
clientsock.close()

注意:先运行server的代码,再运行client的代码。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • python 定义类时,实现内部方法的互相调用

    python 定义类时,实现内部方法的互相调用

    今天小编就为大家分享一篇python 定义类时,实现内部方法的互相调用,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 对Python3中的print函数以及与python2的对比分析

    对Python3中的print函数以及与python2的对比分析

    下面小编就为大家分享一篇对Python3中的print函数以及与python2的对比分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Keras: model实现固定部分layer,训练部分layer操作

    Keras: model实现固定部分layer,训练部分layer操作

    这篇文章主要介绍了Keras: model实现固定部分layer,训练部分layer操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python解析器Cpython的GIL解释器锁工作机制

    Python解析器Cpython的GIL解释器锁工作机制

    这篇文章主要为大家介绍了Cpython的GIL解释器锁工作机制掌握示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 浅谈Python数据处理csv的应用小结

    浅谈Python数据处理csv的应用小结

    这篇文章主要介绍了Python数据处理csv的简单应用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • Python+Selenium实现浏览器的控制操作

    Python+Selenium实现浏览器的控制操作

    这篇文章主要为大家详细介绍了Python+Selenium如何实现常见的浏览器控制操作,例如:浏览器参数设置、控制浏览器前进/后退等,感兴趣的可以了解一下
    2022-09-09
  • 关于爬虫中scrapy.Request的更多参数用法

    关于爬虫中scrapy.Request的更多参数用法

    这篇文章主要介绍了关于爬虫中scrapy.Request的更多参数用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Python  序列化反序列化和异常处理的问题小结

    Python  序列化反序列化和异常处理的问题小结

    这篇文章主要介绍了Python 序列化反序列化和异常处理,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • 使用Pygal库创建可缩放的矢量图表的操作方法

    使用Pygal库创建可缩放的矢量图表的操作方法

    在本文中,我们探讨了如何使用Pygal库创建可缩放的矢量图表,首先,我们介绍了Pygal的基本概念和安装方法,然后通过多个示例演示了如何创建各种类型的图表,包括折线图、柱状图、饼图、散点图、雷达图和地图等,需要的朋友可以参考下
    2024-05-05
  • python 获取当天凌晨零点的时间戳方法

    python 获取当天凌晨零点的时间戳方法

    今天小编就为大家分享一篇python 获取当天凌晨零点的时间戳方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05

最新评论