最近两天把第一部分的网络编程socket好好学习了一番,收获也蛮多的。。。

套接字:能使运行在不同或相同计算机上运行的进行通信;套接字一种是基于文件的(同一台计算机进程间通信),另一种是基于网络的(同一台或不同计算机进程通信),经常使用的是AF_INET

套接字又分:无连接的 和 面向连接的;面向连接的套接字,也就是我们常说的tcp连接;无连接的套接字,就是udp;因为基于网络的所以就要通过ip协议来进行传输,所以下面是通过socket来创建udp和tcp连接:

tcp:tcptest = socket.socket(AF_INET,SOCK_STREAM)    tcp:流套接字,SOCK_STREAM

udp: udptest = socket.socket(AF_INET,SOCK_DGRAM)    udp:数据报(datagram),SOCK_DGRAM

下面将分别使用tcp和udp进行传输,包括服务端和客户端(本次测试:服务端和客户端都是在本机)

1、tcp创建服务器和客户端,常用的方法:s.bind()、s.listen()、s.accept()、s.connect()、s.recv()、s.send()

  s.bind():将地址和端口绑定到套接字上;s.listen():设置并启动监听器;s.accept():接收tcp客户端连接

  s.connect():tcp客户端连接服务器;s.recv():接收tcp消息;s.send():发送tcp消息

  a:TCP服务器:TcpServer.py

 #coding=utf-8

 """
author : xiaoshitou
date : 2016-08-08
"""
from socket import *
from time import ctime host = '127.0.0.1'
port = 2000
bufsiz = 1024
addr = (host, port) tcpServer = socket(AF_INET, SOCK_STREAM)
tcpServer.bind(addr)
tcpServer.listen(5) while True:
print 'TCP...waiting for connection...'
tcpClientSock, addr = tcpServer.accept()
print 'TCP...connected from: {0}'.format(addr,) while True:
data = tcpClientSock.recv(bufsiz)
if not data:
break
tcpClientSock.send('TCP: {0}: {1}'.format(ctime(), data)) tcpClientSock.close()
tcpServer.close()

b:TcpClient.py

 #coding=utf-8

 """
author : xiaoshitou
date : 2016-08-09
"""
from socket import * host = '127.0.0.1'
port = 2000
bufsiz = 1024
addr = (host, port) tcpclient = socket(AF_INET,SOCK_STREAM)
tcpclient.connect(addr) while True:
data = raw_input('> ')
if not data:
break
tcpclient.send(data)
data = tcpclient.recv(bufsiz)
if not data:
break
print data tcpclient.close()

执行结果:

2、udp创建服务器和客户端,常用方法:s.recvfrom():接收udp消息;s.sendto():发送udp消息

a、UdpServer.py

 #coding=utf-8

 """
author : xiaoshitou
date : 2016-08-09
"""
from socket import *
from time import ctime host = '127.0.0.1'
port = 2000
bufsiz = 1024
addr = (host, port) udpserver = socket(AF_INET, SOCK_DGRAM)
udpserver.bind(addr) while True:
print 'UDP...waiting for message...'
data, addr = udpserver.recvfrom(bufsiz)
udpserver.sendto('UDP: {0}: {1}'.format(ctime(), data), addr)
print 'UDP...received from and returned to: {0}'.format(addr,) udpserver.close()

b、UdpClient.py

 #coding=utf-8

 """
author : xiaoshitou
date : 2016-08-09
"""
from socket import *
from time import ctime host = '127.0.0.1'
port = 2000
bufsiz = 1024
addr = (host, port) udpclient = socket(AF_INET,SOCK_DGRAM) while True:
data = raw_input('> ')
if not data:
break
udpclient.sendto(data, addr)
data, addr = udpclient.recvfrom(bufsiz)
if not data:
break
print data udpclient.close()

udp服务端和客户端执行结果:

网络编程:socket--python核心编程(3),chapter 1的更多相关文章

  1. 17 网络客户端编程 - 《Python 核心编程》

  2. 21 数据库编程 - 《Python 核心编程》

  3. 20 Web 编程 - 《Python 核心编程》

  4. 19 图形用户界面编程 - 《Python 核心编程》

  5. 18 多线程编程 - 《Python 核心编程》

  6. python核心编程第二版笔记

    python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d   提供调试输出1.2 –O   生成优化的字节码(生成 ...

  7. python核心编程--笔记

    python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找pyt ...

  8. Python核心编程第二版(中文).pdf 目录整理

    python核心编程目录 Chapter1:欢迎来到python世界!-页码:7 1.1什么是python 1.2起源  :罗萨姆1989底创建python 1.3特点 1.3.1高级 1.3.2面向 ...

  9. python核心编程--笔记(不定时跟新)(转)

    的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找python路径 1.4 –v   ...

  10. python核心编程笔记(转)

    解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找python路径 1.4 –v   冗 ...

随机推荐

  1. Eclipse 基于接口编程的时候,快速跳转到实现类的方法(图文)

    Eclipse 基于接口编程的时候,要跳转到实现类很麻烦,其实Eclipse已经实现该功能. 只要按照Ctrl键,把鼠标的光标放在要跳转的方法上面,第一个是跳转到接口里面,第二个方法是跳转到实现类的位 ...

  2. 深入分析Java Web技术(1)

    BS网络模型的基本过程: 当我们在浏览器中输入"www.google.com"的时候,首先会请求DNS服务器对域名进行解析成都应的IP地址,然后根据这个IP地址在互联网上找到谷歌的 ...

  3. java 获取某个URL的文件扩展名的方法(非精确,精确的扩展名应该使用服务器返回的MIME-TYPE)

    public static String getFileExtension(URL extUrl) { //URL: "http://photosaaaaa.net/photos-ak-sn ...

  4. liunx 服务内存消耗100% 怎么处理

      一.排查问题 查看内存使用 free 查看进程使用存储状况.看是不是业务进程在消耗存储,如果是就要优化业务代码了 使用top 命令 如果不是怎么办 二.处理办法 1.把没有用到的消耗内存的服务进程 ...

  5. BZOJ 3732: Network 最小生成树 倍增

    3732: Network 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3732 Description 给你N个点的无向图 (1 &l ...

  6. 菜鸟译文(三)——JDK6和JDK7中substring()方法的对比

    substring(int beginIndex, int endIndex)方法在JDK6和JDK7中是不同的.了解他们的区别可以让我们更好的使用这个方法.方便起见,以下用substring() 代 ...

  7. Linux shell crontab expdp 定时任务逻辑备份 定时删除旧文件

    点击进入:Window bat expdp 定时任务逻辑备份 定时删除N天前的旧文件 创建sh脚本 [oracle@localhost ~]$ vi logicbackup.sh 添加脚本内容 #!/ ...

  8. 使用magick.net将pdf转换为图片

    现在手上有个需求是要将pdf转换为一页一页的image.最开始找到的是pdfbox来处理pdf的.在pdfbox.apache.org的官网首页写了一句'convert you pdfs to ima ...

  9. RPM 包下载 GCC 4.8安装

    http://ftp.scientificlinux.org/linux/scientific/ http://www.rpmfind.net/linux/rpm2html/search.php?qu ...

  10. dbvis MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT' at line 1

    转自:http://www.cnblogs.com/_popc/p/4053593.html 今天使用数据库查询工具DBvis链接mysql数据库时, 发现执行如何sql语句, 都报如下错误: 后来想 ...