之前实现了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. 【C#】分享一个弹出容器层,像右键菜单那样召即来挥则去

    适用于:.net2.0+ Winform项目 ------------------201508261813更新(源码有更新.Demo未更新)------------------ 重新绘制调整大小手柄( ...

  2. Android手机总是提示:存储空间不足,解决方法

    手机才有16G空间,用一段时间后,总是提示内存不足,各种清理软件都没卵用. 有一个方法立即见效: 1.进入Recovery 2.格式化 SDCard 博客园首席神棍 野生菌野菜干批发 大舍大得 小舍小 ...

  3. EC笔记,第二部分:8.别让异常逃离析构函数

    1.为何析构函数不应该抛出异常?    有两种情况:    1).假设析构函数中有众多语句,而第一条语句抛出异常(或者其他语句),那么抛出异常以后的语句就得不到执行.而通常我们在析构函数中写的是清理资 ...

  4. Nginx主配置参数详解,Nginx配置网站

    1.Niginx主配置文件参数详解 a.上面博客说了在Linux中安装nginx.博文地址为:http://www.cnblogs.com/hanyinglong/p/5102141.html b.当 ...

  5. SQL切换真假状态标识字段

    需求:用一条SQL(SQL SERVER)语句,实现反向更改状态标识字段(类型为bit)的值.即是从true变false,或从false到true. 方案: 一.判断原来这个字段值,然后UPDATE为 ...

  6. HTML5树叶飘落动画

    查看效果:http://keleyi.com/keleyi/phtml/css3/15.htm 请使用Chrome浏览器查看本效果. html源代码: <!DOCTYPE HTML> &l ...

  7. jquery.datatables中文语言设置

    /* * sErrMode * 错误信息显示方式 * 分别为alert和throw,默认为alert */ "sErrMode": "throw", /* * ...

  8. iOS UIScrollView的使用

    一.为什么要用UIScrollView? 移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容普通的UIVie ...

  9. iOS Xcode 打包之后,不能输出日志

    现象:一个项目,之前做的好好的,后来打包,生成ipa文件之后, 再运行的时候,NSLog的日志都不输出了. 解决方案: 在模式选择里面,里面包含:“Debug”.“Release”两种,设置“Debu ...

  10. SDWebImage添加header

    title: SDWebImage添加headerdate: 2016-03-07 17:32:57tags: SDWebImagecategories: IOS keywords: SDWebIma ...