`
f002489
  • 浏览: 271689 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
阅读更多

http://hi.baidu.com/hhytr/blog/item/850c85c54b5624a08226ac50.html

 

一、套接字

套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象。它们允许程序接受并进行连接,如发送和接受数据。为了建立通信通道,网络通信的每个端点拥有一个套接字对象极为重要。

套接字为BSD UNIX系统核心的一部分,而且他们也被许多其他类似UNIX的操作系统包括Linux所采纳。许多非BSD UNIX系统(如ms-dos,windows,os/2,mac os及大部分主机环境)都以库形式提供对套接字的支持。

三种最流行的套接字类型是:stream,datagram和raw stream和datagram套接字可以直接与TCP协议进行接口,而raw套接字则接口到IP协议。但套接字并不限于TCP/IP。

二、套接字模块

套接字模块是一个非常简单的基于对象的接口,它提供对低层BSD套接字样式网络的访问。使用该模块可以实现客户机和 服务器套接字。要在python中建立具有TCP和流套接字的简单服务器,需要使用socket模块。利用该模块包含的函数和类定义,可生成通过网络通信 的程序。一般来说,建立服务器连接需要六个步骤。

第1步是创建socket对象。调用socket 构造函数。

socket=socket.socket(familly,type)

family的值可以是AF_UNIX(Unix域,用于同一台机器上的进程间通讯),也可以是AF_INET(对 于IPV4协议的TCP和UDP),至于type参数,SOCK_STREAM(流套接字)或者 SOCK_DGRAM(数据报文套接字),SOCK_RAW(raw套接字)。

第2步则是将socket绑定(指派)到指定地址上,socket.bind (address)

address必须是一个双元素元组,((host,port)), 主机名或者ip地址+端口号。如果端口号正在被使用或者保留,或者主机名或ip地址错误,则引发socke.error异常。

第3步,绑定后,必须准备好套接字,以便接受连接请求。

socket.listen (backlog)

backlog指定了最多连接数,至少为1,接到连接请求后,这些请求必须排队,如果队列已满,则拒绝请求。

第4步,服务器套接字通过socket的accept 方法等待客户请求一个连接:

connection,address=socket.accept()

调用accept方法时,socket会进入'waiting'(或阻塞)状态。客户请求连接时,方法建立连接并返 回服务器。accept方法返回一个含有俩个元素的元组,形如(connection,address)。第一个元素(connection)是新的 socket对象,服务器通过它与客户通信;第二个元素(address)是客户的internet地址。

第5步是处理阶段,服务器和客户通过sendrecv 方 法通信(传输数据)。服务器调用send,并采用字符串形式向客户发送信息。send方法返回已发送的字符个数。服务器使用recv方法从客户接受信息。 调用recv时,必须指定一个整数来控制本次调用所接受的最大数据量。recv方法在接受数据时会进入'blocket'状态,最后返回一个字符串,用它 来表示收到的数据。如果发送的量超过recv所允许,数据会被截断。多余的数据将缓冲于接受端。以后调用recv时,多余的数据会从缓冲区删除。

第6步,传输结束,服务器调用socket的close 方法以关闭连接。

建立一个简单客户连接则需要4个步骤。

第1步,创建一个socket以连接服务器 socket=socket.socket (family,type)

第2步,使用socket的connect方法连接服务器 socket.connect ((host,port))

第3步,客户和服务器通过sendrecv 方法通信。

第4步,结束后,客户通过调用socket的close 方法来关闭连接。

 

三、一个简单的服务器和客户端通信的例子

服务器:

import socket
s=socket.socket()
s.bind(('xxx.xxx.xxx.xxx',xxxx))    #ip地址和端口号
s.listen(5)
cs,address = s.accept()
print 'got connected from',address
cs.send('byebye')
ra=cs.recv(512)
print ra
cs.close()

客户端:

import socket
s=socket.socket()
s.connect(('xxx.xxx.xxx.xxx',xxxx))   #与服务器程序ip地址和端口号相同
data=s.recv(512)
s.send('hihi')
s.close()
print 'the data received is',data

分享到:
评论

相关推荐

    基于python的socket实现单机五子棋到双人对战

    ### 基于Python的Socket实现单机五子棋到双人对战 #### 概述 本文将详细介绍如何利用Python中的socket库实现一个简单的五子棋游戏,并将其从单机版扩展为支持两人在线对战的版本。通过这个过程,我们将学习到Python...

    详解Python Socket网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要...本文主要介绍使用Python 进行TCP Socket 网络编程,假设你已经具有初步的网络知识及Python 基本语法知识。 TCP 是一种面向连接的传输层协议,TCP Sock

    python教程pdf附带实例

    在Python教程的初步阶段,读者将学习如何安装Python环境,包括解释器和集成开发环境(IDE),如Anaconda或PyCharm。接着,教程会介绍Python的基本语法,包括变量、数据类型(如整型、浮点型、字符串和布尔型)、列表...

    Python教程入门到精通:千锋Python语法基础学习视频教程.pdf

    19. **网络编程**:探讨网络通信,如TCP/IP套接字(socket)编程。 20. **进程与线程**:理解并发执行的概念,学习创建和管理进程以及线程。 21. **线程、协程**:了解异步编程,包括线程间的协作和协程...

    python0基础3天学会

    16. **socket编程**: 使用Python的socket模块进行基本的网络通信,如创建服务器端和客户端,发送和接收数据。 17. **HTTP请求与响应**: 学习如何使用Python的requests库发送HTTP请求和处理响应。 六、实践项目 18...

    python3程序开发指南

    - **网络编程**:掌握TCP/IP协议的基本原理,使用socket模块进行网络通信编程。 - **GUI应用开发**:使用Tkinter或PyQt等库开发图形用户界面应用程序。 ### 总结 通过以上对Python3程序开发指南的核心知识点的详细...

    Python入门教程.pdf

    1. **Python简介**:介绍Python的历史、特点以及安装Python解释器的方法,让读者对Python有一个初步的认识。 2. **Python环境**:讲解如何设置Python开发环境,包括使用IDLE、PyCharm等集成开发环境(IDE),以及...

    Python项目开发实战_开发Python版QQ2006聊天工具_编程案例实例详解课程教程.pdf

    6. **网络通信**:Python的`socket`模块是实现网络通信的基础,项目中会使用它来建立客户端与服务器之间的连接,实现数据的发送和接收。同时,服务器端需要处理来自多个客户端的连接请求,这可能涉及到多线程或者...

    python官方3.1版本msi安装包

    在并发编程上,Python 3.1对`concurrent.futures`框架进行了初步实现,这是一个用于异步执行任务的高级接口,为多线程和多进程编程提供了一种抽象,让开发者可以专注于任务本身而不是底层实现细节。 对于网络编程,...

    Head_First_Python(中文版) 高清

    读者将学习如何使用Python的socket库进行网络通信,创建简单的客户端和服务器应用程序。同时,Python在Web开发中的应用也会被提及,包括使用Flask或Django框架创建Web应用的基本步骤。 最后,书中还涉及到了一些...

    Python官方2.3.2-1版本exe安装包

    此外,该版本还引入了`with`语句的初步支持,尽管在Python 2.5中才正式完整实现。 2. **模块更新**:Python 2.3对许多内置模块进行了更新,例如`os.path`,增加了更多的路径处理函数,使文件操作更加便捷。`socket`...

    python核心编程-第二版

    Python还广泛应用于数据处理和分析,书中对这一领域进行了初步探讨,包括正则表达式用于数据提取,以及使用os和sys模块进行系统交互。此外,书中还涉及了简单数据库操作,如SQLite,以及XML和JSON数据格式的处理。 ...

    Python网络趣味程序.zip_Python 小程序_dangersuu_python3趣味程序_python程序_趣味

    2. 网络编程:Python在网络编程方面表现出色,例如可以使用socket库创建简单的客户端和服务器,理解TCP/IP通信机制。初学者可以通过小程序实践HTTP请求、响应,甚至构建简单的网页爬虫。 3. GUI编程:Python有多种...

    2014年辛星python标准库整理夏季版

    3. **网络编程**:包括cgi模块、urllib.parse模块、urllib.request模块、socket模块、socketserver模块和asyncore模块。这些模块使Python能够处理网络通信,创建客户端和服务器程序。 4. **数据处理与加密存储**:...

    Python-Scout非接触式主动侦察工具

    此外,由于它是用Python编写的,所以拥有丰富的第三方库支持,如`requests`用于HTTP请求,`dnspython`用于DNS解析,`socket`库进行网络通信等。 使用Python-Scout时,通常需要提供目标的域名、IP范围或具体的IP地址...

    《Python与网络安全》课程教学大纲.docx

    该课程教学大纲旨在让学生通过学习Python语言和网络安全相关知识,掌握Python语言的基本语法及其在网络攻防对抗中的应用,并初步掌握Python语言在网络编程、协议分析、网络服务攻防对抗、系统平安运维、编码密码、...

    如何自学-Python(干货合集).pdf

    由于有多语言学习经验,我很快完成了初步语法和使用学习。太复杂的特性还是在使用中逐步掌握的。 阶段三:开始实践 我开始使用 Python 做自己的日常工作,比如 Python 搜索文件、Python 批量处理等。使用最多的...

Global site tag (gtag.js) - Google Analytics