初级网络编程

Mayuyu学习Python很久了,今天就开始学习Python的网络编程。

其实说到网络编程,就必须提到一个关键词---“套接字”,即Socket。网络化的应用程序在开始任何通讯之前都需

要创建套接字,就像电话插口一样,没有它就没有办法进行通讯。对于套接字来说,一般分为两种:基于文件型和基

于网络型。套接字实质上就是一个通信端点。当然,我们可以创建面向连接的套接字或者面向无连接的套接字,分别

对应TCP协议和UDP协议。

在网络编程中,都是基于C/S模式的,所以分为客户端和服务端。接下来学习利用Python编写最简单的Socket。

先来看基于TCP的Socket:

服务端

#Server
from socket import*
from time import ctime

HOST    = ‘222.27.174.90‘
PORT    = 21511
BUFSIZE = 1024
ADDR = (HOST,PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)

while True:
    tcpCliSock, addr = tcpSerSock.accept()
    while True:
        data = tcpCliSock.recv(BUFSIZE)
        if not data:
            break
        print ‘%s‘ %(ctime())
        print data
        tcpCliSock.send(‘[%s]\n %s‘ %(ctime(), data))

tcpSerSock.close()

客户端

from socket import *

HOST = ‘222.27.174.90‘
PORT = 21511
BUFSIZE = 1024
ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)

while True:
	data = raw_input(‘>‘)
	if not data:
		continue
	tcpCliSock.send(data)
	data = tcpCliSock.recv(BUFSIZE)
	print data

tcpCliSock.close()

服务端和客户端的HOST与PORT一定要相同才行。

基于UDP的Socket:

服务端:

#Server
from socket import*
from time import ctime

HOST    = ‘222.27.174.90‘
PORT    = 21512
BUFSIZE = 1024
ADDR = (HOST,PORT)

udpSerSock = socket(AF_INET, SOCK_DGRAM)
udpSerSock.bind(ADDR)

while True:
    data, addr = udpSerSock.recvfrom(BUFSIZE)
    print ‘%s‘ %(ctime())
    print data
    udpSerSock.sendto(‘[%s]\n %s‘ %(ctime(), data), addr)

udpSerSock.close()

客户端:

from socket import *

HOST = ‘222.27.174.90‘
PORT = 21512
BUFSIZE = 1024
ADDR = (HOST, PORT)

udpCliSock = socket(AF_INET,SOCK_DGRAM)

while True:
    data = raw_input(‘>‘)
    if not data:
        continue
    udpCliSock.sendto(data, ADDR)
    data, ADDR = udpCliSock.recvfrom(BUFSIZE)
    print data

udpCliSock.close()

接下来学习一些套接字对象的常用函数。。。

(1)服务端套接字函数

s.bind()         绑定地址(主机名,端口)到套接字

s.listen()       开始TCP监听

s.accept()       被动接受TCP客户端连接,(阻塞式等待连接的到来)

(2)客户端套接字函数

s.connect()      主动初始化TCP服务器连接

s.connect_ex()   connect)()函数的扩展版本,出错时返回出错码,而不是抛出异常

(3)公共用途的套接字函数

s.recv()         接收TCP数据

s.send()         发送TCP数据

s.sendall()      完整发送TCP数据

s.recvfrom()     接收UDP数据

s.sendto()       发送UDP数据

初级网络编程,布布扣,bubuko.com

时间: 2024-10-20 18:52:10

初级网络编程的相关文章

[JAVA · 初级]:22.网络编程

基本概念 计算机网络:把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大.功能强的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件.软件.数据信息等资源. 计算机网络的主要功能: 资源共享: 信息传输与集中处理: 均衡负荷与分布处理: 综合信息服务 (www/综合业务数字网络 ISDN). 网络通信协议:计算机网络中实现通信必须有一些约定即通信协议,对速率.传输代码.代码结构.传输控制步骤.出错控制等制定标准. 网络通信接口:为了使两个结点之间能进行对话,必须在它

TCP/IP网络编程系列之四(初级)

TCP/IP网络编程系列之四-基于TCP的服务端/客户端 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP和UDP套接字.因为TCP套接字是面向连接的,因此又称为基于流的套接字.在了解TCP之前,先了解一下TCP所属的TCP/IP协议栈. 如图所示,TCP/IP协议栈共分为4层,可以理解成数据收发分成了4个层次化过程. 链路层 它是物理链接领域标准化结果,也是最基本的领域,专门定义LAN.WAN.MAN等网络标准.若两台计算机通过网络进行数据交换,链路层就负责整个物

TCP/IP网络编程系列之二(初级)

套接字类型与协议设置 我们先了解一下创建套接字的那个函数 int socket(int domain,int type,int protocol);成功时返回文件描述符,失败时返回-1.其中,domain是套接字使用中的协议族(Protocol Family)信息.type套接字类型里面的数据传输类型信息.protocol计算机通信中使用的协议信息. 协议族(Protocol Family) 协议族类型有: PE_INET IPV4 PE_INET6 IPV6 PF_LOCAL 本地通信的UNI

TCP/IP网络编程系列之三(初级)

TCP/IP网络编程系列之三-地址族与数据序列 分配给套接字的IP地址和端口 IP是Internet Protocol (网络协议)的简写,是为首发网络数据而分配给计算机的值.端口号并非赋予计算机值,而是为了区分程序中创建的套接字而分配给套接字的序号. 网络地址 网络地址分为IPV4和IPV6,分别你别为4个字节地址簇和6个字节地址簇.IPV4标准的4个字节的地址分为网络地址和主机地址,且分为A.B.C.D.E 等类型.一般很少用到E类型.如下图所示:net-id指网络ID,host-id指主机

python网络编程初级

网络编程的专利权应该属于Unix,各个平台(如windows.Linux等).各门语言(C.C++.Python.Java等)所实现的符合自身特性的语法都大同小异.在我看来,懂得了Unix的socket网络编程,其他的形式的网络编程方法也就知道了.这句话说得还不太严谨.准确的应该说成懂得了socket编程的原理,网络编程也就知道了,不同之处就在于每个平台,每个语言都有自己专享的语法,我们直接灵活套用就行了. 下面是用python实现的最基本的网络编程的例子,即依托于客户端-服务器的架构,实现客户

Winpcap网络编程十之Winpcap实战,两台主机通过中间主机通信

注:本篇博客同样不针对于伸手党,源代码等等的我不会完全公开的,此篇文章写出来为大家的网络编程或者课程设计提供一定的思路.. 好,本次我们需要完成的任务是: 完成两台主机通过中间主机的数据通信(网络层) 增加基于IP地址的转发功能 增加网络层封装 其实最主要的就是基于IP地址的转发功能,网络层的封装其实我们在初级功能中就已经做好了. 首先,实验的思路是A通过中间主机B向C发送数据.那么B则作为一个路由器,B要监听两个网卡,一个网卡发来的数据通过另一个网卡发出去. 示意图如下: A---------

python基础--面向对象高级、异常处理、网络编程

一.面向对象高级 1.接口与归一化设计 接口只是定义了一些方法,而没有去实现,多用于程序设计时,只是设计需要有什么样的功能,但是并没有实现任何功能,这些功能需要被另一个类(B)继承后,由 类B去实现其中的某个功能或全部功能. 在python中接口由抽象类和抽象方法去实现,接口是不能被实例化的,只能被别的类继承去实现相应的功能 归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了,这极大地降低了使用者的使用难度. 归一化使得高层的外部使用者可以不加区分的处理所有接口兼容的

也谈服务器端网络编程

这里主要说一下自己看的书和一些心得体会,把自己的学习路线梳理一下,也是作为自己这段时间的学习总结. 因为从事的都是服务器端开发和学习,所以本文内容主要在该范围内,假定读者经过了系统的CS学习(DS.OS.组成原理等核心课程). First,我的学习书籍路线参考如下内容: 1 A:<Linux鸟哥私房菜>(第三版): 2 3 B:<Linux程序设计>(第四版 中文版): 4 5 C:<TCP/IP详解v1>(英文版): 6 7 D:C/C++语言相关: 8 9 E:&l

网络编程懒人入门(六):史上最通俗的集线器、交换机、路由器功能原理入门

1.前言 即时通讯网整理了大量的网络编程类基础文章和资料,包括<TCP/IP协议 卷1>.<[通俗易懂]深入理解TCP协议>系列.<网络编程懒人入门>系列.<不为人知的网络编程>系列.<P2P技术详解>系列.<高性能网络编程>系列.甚至还有图文并貌+实战代码的<NIO框架入门>等,目的是帮助即时通讯类应用的开发者,至少要掌握网络编程最基本的原理,所谓知其然更要知其所以然.尤其现在移动网络大行其道的时代,在网络环境如此复杂的