最近两天把第一部分的网络编程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. 利用EEPROM实现arduino的断电存储

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyiQQ群:64770604 一.EEPROM简介 EEPROM (Electrically Erasable Progr ...

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

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

  3. TextEdit 回车事件

    <dxe:TextEdit Name="txtSearchPatientName" KeyDown="txtSearchPatientName_KeyDown_1& ...

  4. 理解TCP为什么需要进行三次握手(白话)

    原文地址:http://www.cnblogs.com/yuilin/archive/2012/11/05/2755298.html 首先简单介绍一下TCP三次握手 在TCP/IP协议中,TCP协议提 ...

  5. Android开发(二十七)——android:layout_weight的真实含义

    android:layout_weight的真实含义是:一旦View设置了该属性(假设有效的情况下),那么该 View的宽度等于原有宽度(android:layout_width)加上剩余空间的占比! ...

  6. [CoreOS 转载] CoreOS实践指南(七):Docker容器管理服务

    转载:http://www.csdn.net/article/2015-02-11/2823925 摘要:当Docker还名不见经传的时候,CoreOS创始人Alex就预见了这个项目的价值,并将其做为 ...

  7. jQuery 通配符

    通配符: $("input[id^='code']");//id属性以code开始的所有input标签 $("input[id$='code']");//id属 ...

  8. 绘制n边形:用两个以上的控件来控制矩形的颜色、大小、位置及空实心(程序代写)

    绘制n边形:用两个以上的控件来控制矩形的颜色.大小.位置及空实心.(n由键盘输入) package lzy.di9zhang; import java.awt.BorderLayout;import ...

  9. ORACLE 10g下载地址

    ORACLE 10g下载地址 oracle 下载还需要用户名我自己注册了个方便大家使用下载 密码是这个 一般不会动了 大家也不用帮我找回密码了 每次都改 也很麻烦的如果有需要可以帮我浏览下 右侧的需要 ...

  10. 【C#|.NET】从细节出发(三) 逻辑层事务和page object模式

    一. 业务逻辑层的事务问题 如果你的程序分层清晰并且系统禁用复杂存储过程,那么在DA中的职责比较单一.程序的逻辑通过BLL调用各种不同模块的DA来实现数据操作.如果当需要不同模块在一个事务的时候,问题 ...