博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Python网络编程】利用Python进行TCP、UDP套接字编程
阅读量:5339 次
发布时间:2019-06-15

本文共 2857 字,大约阅读时间需要 9 分钟。

之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验。

流程如下:

1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接字将该行发送到服务器。

2.服务器从其连接套接字读取一行字符。

3.服务器将该行字符转换成大写。

4.服务器将修改后的字符串(行)通过连接套接字再发回给客户机。

5.客户机从其套接字中读取修改后的行,然后将该行在其标准输出(监视器)上打印出来。

 

【TCP】服务器端代码:

import socketimport timeimport threadings = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  #创建socket (AF_INET:IPv4, AF_INET6:IPv6) (SOCK_STREAM:面向流的TCP协议)s.bind(('127.0.0.1', 10021))                           #绑定本机IP和任意端口(>1024)s.listen(1)                                            #监听,等待连接的最大数目为1print('Server is running...')                                                         def TCP(sock, addr):                                   #TCP服务器端处理逻辑        print('Accept new connection from %s:%s.' %addr)   #接受新的连接请求    while True:        data = sock.recv(1024)                         #接受其数据        time.sleep(1)                                  #延迟        if not data or data.decode() == 'quit':        #如果数据为空或者'quit',则退出            break        sock.send(data.decode('utf-8').upper().encode())  #发送变成大写后的数据,需先解码,再按utf-8编码,  encode()其实就是encode('utf-8')    sock.close()                                       #关闭连接    print('Connection from %s:%s closed.' %addr)       while True:        sock, addr = s.accept()                            #接收一个新连接    TCP(sock, addr)                                    #处理连接

【TCP】客户端代码:

import sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建一个sockets.connect(('127.0.0.1', 10021))                       #建立连接while True:                                           #接受多次数据    data = input('请输入要发送的数据:')                 #接收数据    if data == 'quit':                                #如果为'quit',则退出        break    s.send(data.encode())                             #发送编码后的数据    print(s.recv(1024).decode('utf-8'))               #打印接收到的大写数据s.send(b'quit')                                       #放弃连接s.close()                                             #关闭socket

运行结果:

 

UDP协议则不需要事先建立连接,直接互相发送数据即可。

【UDP】服务器端代码:

import sockets = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #创建一个socket,SOCK_DGRAM表示UDPs.bind(('127.0.0.1', 10021))                         #绑定IP地址及端口print('Bound UDP on 10021...')while True:                                              data, addr = s.recvfrom(1024)   #获得数据和客户端的地址与端口,一次最大接收1024字节    print('Received from %s:%s.' % addr)    s.sendto(data.decode('utf-8').upper().encode(), addr)#将数据变成大写送回客户端#不关闭socket

 

【UDP】客户端代码:

import sockets = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  addr = ('127.0.0.1', 10021)       #服务器端地址while True:    data = input('请输入要处理的数据:') #获得数据    if not data or data == 'quit':        break    s.sendto(data.encode(), addr)    #发送到服务端    recvdata, addr = s.recvfrom(1024)  #接收服务器端发来的数据    print(recvdata.decode('utf-8'))    #解码打印s.close()            #关闭socket

 

运行结果:

转载于:https://www.cnblogs.com/whatbeg/p/5155524.html

你可能感兴趣的文章
CSS3中box-sizing的理解
查看>>
传统企业-全渠道营销解决方案-1
查看>>
Lucene全文检索
查看>>
awk工具-解析1
查看>>
推荐一款可以直接下载浏览器sources资源的Chrome插件
查看>>
CRM product UI里assignment block的显示隐藏逻辑
查看>>
展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告...
查看>>
AMH V4.5 – 基于AMH4.2的第三方开发版
查看>>
Mac下安装npm全局包提示权限不够
查看>>
Web.Config文件配置之配置Session变量的生命周期
查看>>
mysql导入source注意点
查看>>
Python: 对于DataFrame.loc传入列表和传入元组输出区别的理解
查看>>
USACO / Sorting a Three-Valued Sequence (简单题,方法正确性待证)
查看>>
Android开发中 .9.png格式图形设计:
查看>>
Linux常见命令
查看>>
ASP.NET Page执行顺序如:OnPreInit()、OnInit()
查看>>
linux下编译安装nginx
查看>>
adb命令
查看>>
SQL自定义排序 ORDER BY
查看>>
Modal模态框scrolltop保留上次位移的解决方案
查看>>