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

流程如下:

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

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

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

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

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

【TCP】服务器端代码:

import socket
import time
import threading s = 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) #监听,等待连接的最大数目为1 print('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 socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建一个socket

s.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 socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #创建一个socket,SOCK_DGRAM表示UDP

s.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 socket

s = 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

运行结果:

【Python网络编程】利用Python进行TCP、UDP套接字编程的更多相关文章

  1. 《Unix 网络编程》08:基本UDP套接字编程

    基本UDP套接字编程 系列文章导航:<Unix 网络编程>笔记 UDP 概述 流程图 recvfrom 和 sendto #include <sys/socket.h> ssi ...

  2. UNIX网络编程 第8章 基本UDP套接字编程

    UDP是无连接的,不需要accept,TCP通过accept API来接受连接,并且将连接客户端的信息写入到accept将返回的新socket中,该新socket中有服务端和客户端的IP地址和端口,因 ...

  3. TCP和UDP套接字编程 (java实现)

    在了解网络编程之前,我们先了解一下什么叫套接字 套接字即指同一台主机内应用层和运输层之间的接口 由于这个套接字是建立在网络上建立网络应用的可编程接口 因此也将套接字称为应用程序和网络之间的应用程序编程 ...

  4. UDP,TCP的套接字编程的Python实现

    UDP,TCP的套接字编程的Python实现 套接字:连接应用层和运输层,应用层的网络应用程序使用IP地址+端口号来标识自己,然后通过套接字调用运输层为其服务,网络应用程序只能指定自己要使用的网络类型 ...

  5. 【Java】Java网络编程菜鸟进阶:TCP和套接字入门

    Java网络编程菜鸟进阶:TCP和套接字入门 JDK 提供了对 TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protoco ...

  6. 【Unix网络编程】chapter8基本UDP套接字编程

    chapter8基本UDP套接字编程 8.1 概述 典型的UDP客户端/服务端的函数调用 8.2 recvfrom和sendto函数 #include <sys/socket.h> ssi ...

  7. 探索UDP套接字编程

    UDP和TCP处于同一层网络模型中,也就是运输层,基于二者之上的应用有很多,常见的基于TCP的有HTTP.Telnet等,基于UDP有DNS.NFS.SNMP等.UDP是无连接,不可靠的数据协议服务, ...

  8. 【转】 探索UDP套接字编程

    UDP和TCP处于同一层网络模型中,也就是运输层,基于二者之上的应用有很多,常见的基于TCP的有HTTP.Telnet等,基于UDP有DNS.NFS.SNMP等.UDP是无连接,不可靠的数据协议服务, ...

  9. JavaTCP和UDP套接字编程

    在我们刚开始入门Java后端的时候可能你会觉得有点复杂,包含了很多杂七杂八的知识,例如文件上传下载,监听器,JDBC,请求重定向,请求转发等等(当然也没有很多),但是我们自己真正的去开发一个小型网站( ...

随机推荐

  1. 解决eclipse中logcat不显示log的问题

    调试程序需要打印一些消息出来,logcat不好用的话就很麻烦了.这个问题折腾了好久,为啥就是不出来呢? 上网找了很多解决办法: 重启eclipse 重启adb 重启logcat ......等等好多 ...

  2. 背水一战 Windows 10 (25) - MVVM: 通过 x:Bind 实现 MVVM(不用 Command)

    [源码下载] 背水一战 Windows 10 (25) - MVVM: 通过 x:Bind 实现 MVVM(不用 Command) 作者:webabcd 介绍背水一战 Windows 10 之 MVV ...

  3. Jar mismatch错误的解决

    新建了一个项目,包含了两个库:appcompat_v7和swipelistview,结果出现了Jar mismatch错误: [2016-04-11 17:17:27 - MySwipeListVie ...

  4. Oracle 编程

    编程:储存过程,自定义函数,触发器,包. 储存过程 在命令窗口用exec调 作用:存储在数据库中用于完成某个功能的程序 创建在 procedure里 create or replace procedu ...

  5. 分享20款移动开发中很有用的 jQuery 插件

    今天,很显然每个网站都需要有一个移动优化的界面以提高移动用户的使用体验.在开发任何移动项目时,要尽可能保持每一种资源尺寸都尽可能的小,以给最终用户提供一个好的体验是非常重要的.在这篇文章中我们已经编制 ...

  6. arcgis地图数据集合

    一.全国的ArcGIS地图SHP格式数据,覆盖的图层信息量基本齐全,除了ArcGIS之外,其他GIS软件(superMap和MapGIS.MapInfo等等)也是用之,适合为GIS开发提供数据素材. ...

  7. 关于iOS10

    iOS10相册相机闪退bughttp://www.jianshu.com/p/5085430b029fiOS 10 因苹果健康导致闪退 crashhttp://www.jianshu.com/p/54 ...

  8. webapp开发调试环境--weinre配置

    用谷歌调试工具中的手机模拟器模拟手机进行webapp的开发,与真机上的效果还是有些偏差,opera手机模拟器的效果亦不佳.有时在pc上开发出来的webapp效果良好,在部分真机上就出现了偏差,这时候就 ...

  9. RESTORE detected an error on page (0:0) in database

    在测试服务器还原生产服务器的一个数据库时遇到了下面错误: System.Data.SqlClient.SqlError: RESTORE detected an error on page (0:0) ...

  10. 机器学习实战笔记(Python实现)-01-K近邻算法(KNN)

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...