TCP网络编程(Python)

基于TCP/IP通信协议的socket,是由一个IP地址和一个端口号唯一确定的。网络上两个程序通过一个双向的通信连接实现数据的交换,这个双向链路的一端就称为一个socket。TCP/IP通信协议的传输层包含两个传输协议:面向连接的TCP和非面向连接的UDP。使用TCP还是UDP的指导方针:

以下情况应该使用TCP:

1.你需要一个可靠的数据传输,以确保你的数据完整无缺地到达目的地;

2.你的协议需要不止一个请求和服务器的回答;

3.你需要发送较多的数据;

4.初始连接出现短暂的延迟是可以容忍的。

以下情况应该考虑使用UDP:

1.你不太关心信息包是否到达,或者不太在意信息包到达的顺序是否正确,再或者你自己可以察觉到这些问题并自己解决;

2.你的协议之包括基本的请求和回答;

3.你需要尽快建立网络会话;

4.只传输很少一部分数据。UDP的限制是一个信息包不超过64KB的数据,通常人们只用UDP传输1KB以下的数据。

基于socket的TCP程序框架如下图:


服务器端:ChatServerTCP.py

import socket
serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  #创建服务器socket,基于IPV4的TCP协议
serversocket.bind(("127.0.0.1",8000))  #绑定到IP地址和端口号
serversocket.listen(1)    #开始侦听,队列长度为1
clientsocket,clientaddress=serversocket.accept()  #使用阻塞方法accept以等待客户机连接请求
print("Connection from ",clientaddress)  #打印输入客户机的信息
while 1:
    data=clientsocket.recv(1024)   #接收数据缓存大小
    if not data:
        break      #如果接收数据为空,则跳出循环
    print("Received from client: ",repr(data))   #输出接收到的数据,repr是个字符串转换函数
    print("Echo: ",repr(data))    #输出发送到客户机数据的信息
    clientsocket.send(data)    #回送数据到客户机

clientsocket.close()     #关闭客户机socket
serversocket.close()     #关闭服务器

客户端:ChatClientTCP.py

import socket
clientsocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #创建客户机socket
clientsocket.connect(("127.0.0.1",8000))   #连接到服务器
while 1:
    data=raw_input('>')   #接收用户输入数据
    clientsocket.send(data.encode())   #把数据转换为bytes对象,并发送到服务器
    if not data:
        break     #如果数据为空,终止循环
    newdata=clientsocket.recv(1024)   #接收服务器的回送数据
    print("Received from server: ",repr(newdata))   #输出接收到的回送数据
clientsocket.close()     #关闭客户机socket

在Windows的IDLE环境下运行时需要打开两个IDLE的shell窗口,然后先运行服务器端的程序,在运行客户端程序。执行结果如下:

(服务器端结果)


(客户端结果:)


在Linux环境下运行,需要同时打开两个终端,先运行服务器端程序,在运行客户端程序,结果如下:

(服务器端:)


(客户机端:)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值