TCP编程-python实现
来源:互联网 发布:php 多用户商城 编辑:程序博客网 时间:2024/06/05 07:59
TCP是一个面向连接的协议。这意味着客户和服务器要先握手和创建一个TCP连接,才能互相发送数据。在创建这个连接时,客户端通过套接字地址(IP和端口号)和服务器的套接字地址(IP和端口号)关联起来。然后,在之后的通信中,服务器和客户端如果要发送数据,直接把数据交给套接字就可以进行传送。(与之相对的时UDP,每次发送数据都要附带客户端地址,而且并不保证数据传输完整,但不需要像TCP一样耗费维持连接的资源。)
在TCP服务器与客户端连接中,客户端总是作为首先发起请求的一端,所以TCP服务器程序要保持一直运行,随时准备接收客户端的请求。
在细节中表示为,客户通过创建自己的套接字发起向服务器的TCP连接。客户生成这个套接字时,就指定了服务器端的套接字地址。即服务器的IP地址和套接字端口。这个套接字地址也被称为欢迎套接字(serverSocket)。
随后进行的三次握手期间,服务器会生成一个专门服务这个客户端的套接字,称为连接套接字(connection Socket)。
现在从服务器端或客户端看,客户套接字和服务器套接字通过一根管道(连接套接字)相连。客户进程和服务器进程可以通过这根管道发送任意字节,接收任意字节,并且,TCP保证这些字节保质保量严格按照发送顺序到达目的地。
接下来用python实现一个简单的TCP服务器和客户端。大致流程如下:
首先是服务器端的实现方法。Python版本3.5.2
#!/usr/bin/env python# coding=utf-8from socket import *serverPort = 9999 #定义端口serverSocket = socket(AF_INET, SOCK_STREAM) #第一个参数是地址族,即是IPV4还是IPV6,第二个是套接字类型serverSocket.bind(('', serverPort)) #参数元组的第一个字符串代表IP地址,第二个是端口serverSocket.listen(1) #最大请求树1print('the server is ready to receive')while True: connectionSocket, addr = serverSocket.accept() sentence = connectionSocket.recv(1024) capitalizedSentence = sentence.upper() #upper()是转换成大写的函数 connectionSocket.send(capitalizedSentence) connectionSocket.close()以定义端口号为第一行。
第二行,创建一个IPV4,套接字类型是TCP流式套接字的socket对象,这个对象就是上面说的欢迎套接字。
第三行,绑定服务器的地址和端口号。
第四行,服务器可接受的最大请求数是1个。
第五行,就是服务器要一直运行并监听端口,随时等待来自客户端的连接请求。
第六行,接听连接,完成握手,返回一个专门服务该客户的socket对象(也就是连接套接字),和连接另一端套接字的地址。
第七行,表示每一次接受的最大数据是1024字节,并返回接收到的字节对象。
第九行,把转换的大写数据发送出去。
第十行,关闭连接。进入while循环,继续监听端口。这只是练习,实际中需要多线程来处理请求。
接下来是客户端
#!/usr/bin/env python# coding=utf-8from socket import *serverName = ''serverPort = 9999clientSocket = socket(AF_INET, SOCK_STREAM)clientSocket.connect((serverName, serverPort))sentence = input('Input lowercase sentence:').encode('ascii')clientSocket.send(sentence)modifiedSentence = clientSocket.recv(1024)print('from server:', modifiedSentence)clientSocket.close()
以定义服务器名称为第一行。
第三行,创建了客户端的socket对象。客户端的套接字端口号不是由自己添加的,而是由操作系统添加的。
第四行,前面说过客户和服务器发送数据之前,要先建立TCP连接,这一行就发起了客户和服务器之间的连接。参数就是服务器地址。这行代码执行完毕后,三次握手,并在客户和服务器之间建立起连接。
第六行,在连接管道中向服务器发送消息。从这一行和服务器的send就能看出,只要TCP连接建立起来,客户和服务器的消息就可以在这条管道中任意通行(毕竟维护这条管道也是付出代价的)。
运行结果:
TCP/IP代表传输控制协议/网际协议,指的是一系列协议。“IP”代表网际协议,TCP和UDP使用该协议从一个网络传送数据包到另一个网络。把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP,文件传输协议FTP这样的协议等。
- TCP编程-python实现
- python网络编程之TCP实现
- python socket编程 TCP
- Python socket编程(TCP)
- Python socket编程(TCP)
- Python TCP编程
- Python---TCP编程
- TCP编程(python)
- python TCP编程小试牛刀
- python 学习-- TCP编程
- Python网络编程--TCP
- Python基础-TCP编程
- python TCP/IP 编程
- tcp编程-python
- Python基础-TCP编程
- python socket编程实现的简单tcp迭代服务器
- python网络编程(TCP客户端/服务器端实现)
- python编程(8):TCP编程
- 设计模式之代理模式
- Apache2.4 安装配置
- 边缘检测
- Centos7 GUI图形界面
- 5.12
- TCP编程-python实现
- Java Swing 图形界面实现验证码(验证码可动态刷新)
- PHP7.1.5 安装与 apache2.4链接
- JDBC中存在的问题
- JAVA如何实现发送短信
- IDEA使用mabaits generator逆向工程代码
- 各种参考博客
- centOS7 配置vsftpd
- 模拟实现qsort函数