Python核心编程第三版第二章学习笔记
2024-10-19 13:30:31
第二章 网络编程
1、学习笔记
2、课后习题
答案是按照自己理解和查阅资料来的,不保证正确性。如由错误欢迎指出,谢谢
1. 套接字:A network socket is an endpoint of a connection across a computer network,Sockets are often represented internally as simple integers, which identify which connection to use.
套接字是网络通信的一个通信端点
有两种类型:
Stream Socket使用TCP协议的面向连接的socket ,SOCK_STREAM
Datagram Socket:使用UDP协议的无连接的socket, SOCK_DGRAM
2. Client/Server 构架
C/S构架
3. TCP和UDP套接字的工作原理
5.使用os.listdir("/etc")返回目录列表,os.curdir 表示当前的目录 .
os.name 返回操作系统信息
#!/usr/bin/python #Filename : tsUserv.py from socket import * from time import ctime import os HOST = "" PORT = 31080 BUFSIZ = 1024 ADDR = (HOST, PORT) udpSerSock = socket(AF_INET, SOCK_DGRAM) udpSerSock.bind(ADDR) while True: print "waiting for connection" sysname = os.name curdir = os.curdir data, addr = udpSerSock.recvfrom(BUFSIZ) dir = os.listdir("/etc") udpSerSock.sendto("[%s] %s %s %s %s" %(ctime(),data,sysname,curdir,dir),addr) print "received from and retrurned to :",addr udpSerSock.close()
6.Daytime 服务,获取ssh服务的默认端口号返回给客户端
客户端使用的还是书中的例子,只是改了下服务端口
#!/usr/bin/python # Filename : 2.6.ser.py from socket import * from time import ctime HOST = "192.168.40.128" PORT = 40026 ADDR = (HOST,PORT) BUFSIZ = 1024 udpSerSock = socket(AF_INET,SOCK_DGRAM) udpSerSock.bind(ADDR) while True: print "waiting for messages" data,addr = udpSerSock.recvfrom(BUFSIZ) portNum = getservbyname("telnet") #return an integer value ,and the function get the number from the file /etc/services. # portNum = udpSerSock.getservbyname("ssh") udpSerSock.sendto("%d"%portNum,addr) # udpSerSock.sendto("%s"%portNum,addr) print "received from and returned to:",addr udpSerSock.close()
7. 半双工聊天
目前实现只能通过client 发起会话,无法从server发起会话,后续考虑如何实现从两侧都能主动发起会话。
server端代码:
#!/usr/bin/python # Filename : 2.7_server.py from socket import * from time import ctime HOST = "192.168.40.128" PORT = 40027 BUFSIZ = 10240 ADDR = (HOST,PORT) tcpSerSock = socket(AF_INET,SOCK_STREAM) tcpSerSock.bind(ADDR) tcpSerSock.listen(5) print "waiting for messages" while True: tcpCliSock,addr = tcpSerSock.accept() print "connected from :",addr #这里可以实现从两端发起会话,但是会导致一段的消息在另外一端不能及时显示,必须输入要发送的消息之后才能看到上一条对方发送的消息。 # while True: # data_local = raw_input("waiting for input>>>") # if not data_local: # continue # tcpCliSock.send("[%s] %s"%(ctime(),data_local)) # print "send message to client successful,waiting for response" while True: data_remote = tcpCliSock.recv(BUFSIZ) if not data_remote: break print "He says : ",data_remote while True: data_local = raw_input("waitint for input>>>") if not data_local: continue tcpCliSock.send("[%s] %s"%(ctime(),data_local)) print "send message to client successful,waitinf for response" break tcpSerSock.close()
client端代码:
#!/usr/bin/python # Filename : 2.7_client.py from socket import * from time import ctime HOST = "192.168.40.128" PORT = 40027 BUFSIZ = 10240 ADDR = (HOST,PORT) tcpCliSock = socket(AF_INET,SOCK_STREAM) tcpCliSock.connect(ADDR) print "waiting for messages" while True: while True: data_local = raw_input("waiting for input>>>") if not data_local: continue tcpCliSock.send("[%s] %s"%(ctime(),data_local)) print "send message to server successful,waiting for response" while True: data_remote = tcpCliSock.recv(BUFSIZ) if not data_remote: break print "He says : ",data_remote break tcpCliSock.close()
8.全双工聊天
最新文章
- [CareerCup] 1.8 String Rotation 字符串的旋转
- Socket网络编程(2)--服务端实现
- 通过js对表单对象的便捷获取
- 串口log
- RPi 2B 中文语言包
- NOIP2005 过河
- WPF笔记(1.8 资源与映射)——Hello,WPF!
- IZ65534: 'JAVA.LANG.CLASSFORMATERROR' ERROR FOR A VALID IDENTIFIER
- 搭积木(block)
- git bash 下操作文件及文件夹命令
- Java入门系列Java NIO
- R2CNN项目部分代码学习
- Android Studio打包程序时出现transformClassesWithDexForRelease错误
- python计算文件夹大小——os.walk
- 用rem来做响应式开发(转)
- ASP.NET Web API实践系列05,消息处理管道
- 通过16道练习学习Linq和Lambda
- VCS中的覆盖率分析
- 依赖注入(DI)在PHP中的实现
- postman—Runner的使用
热门文章
- 项目规范性检测工具Lint
- ASP.NET Web API 实现客户端Basic(基本)认证 之简单实现
- php file_get_contents失败[function.file-get-contents]: failed to open stream: HTTP request failed!解决
- 0930MySQL中实现高性能高并发计数器方案(例如文章点击数)
- 使用Servlet实现下载文件的功能
- 使用D3绘制图表(2)--绘制曲线
- 了解ASP.NET MVC几种ActionResult的本质:JavaScriptResult &; JsonResult
- C#-WebForm-★ 制作图片验证码 ★
- Asp.net Mvc 使用EF6 code first 方式连接MySQL总结
- Web前端性能优化教程07:精简JS 移除重复脚本