Python 中的TCP socket 写法
2018-06-18 02:51:59来源:未知 阅读 ()
一、 服务器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]) listen(self,backlog = None) ,backlog需要大于0,指定了可以缓存的连接请求的数量。
4. accept 接受请求连接 在等待一个即将来临的连接,会返回一个代表连接的新的socket,还会返回一个地址(host和port),可以用两个东西接收,前一个代表新的socket,后一个就是接收地址。
写的方法:connet_socket,client_addr = srv.accept() 。 connet_socket,client_addr,前者表示接下来进行传输的新的socket,后者就是地址,具体看程序第10行。
5. 接收数据 使用方法:socket.recv(bufsize[,flags]) 从 socket 中接收数据,返回的是 bytes ,是接收到的内容。bufsize指定了一次最多接收多少个数据,如果没有数据接收,程序会阻塞,一直到有数据或者远程终端断开连接。
6. 发送数据 使用方法:socket.send(bytes[, flags]) 你的socket必须和远程的socket建立了联系,返回值是发送的数量,可以判断你的数据是否发送完毕,如果没有,继续send余下来的数据。
1 import socket 2 hostname = '127.0.0.1' #设置主机名 3 port = 6666 #设置端口号 要确保这个端口号没有被使用,可以在cmd里面查看 4 addr = (hostname,port) 5 srv = socket.socket() #创建一个socket 6 srv.bind(addr) 7 srv.listen(5) 8 print("waitting connect") 9 while True: 10 connect_socket,client_addr = srv.accept() 11 print(client_addr) 12 recevent = connect_socket.recv(1024) 13 print(str(recevent,encoding='gbk')) 14 connect_socket.send.send(bytes("你好,数据传输完成,这里是gaby-yan--server",encoding='gbk')) 15 connect_socket.close()
二、 客户端client的写法:
客户端的写法相对比较简单,只有1.创建socket 2. 建立连接 connect 3. 发送 send 4. 接收recv
这是由于他们的传递编程框架不同造成的,如图。(图不是我自己画的。。。)
1 import socket 2 hostname = '127.0.0.1' 3 port = 7777 4 addr = (hostname,port) 5 6 clientsock = socket.socket() ## 创建一个socket 7 clientsock.connect(addr) # 建立连接 8 9 say = input("输入你想传送的消息:") 10 clientsock.send(bytes(say,encoding='gbk')) #发送消息 11 recvdata = clientsock.recv(1024) #接收消息 recvdata 是bytes形式的 12 print(str(recvdata,encoding='gbk')) # 我们看不懂bytes,所以转化为 str 13 clientsock.close()
注意:先运行server的代码,再运行client的代码。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash