python模块—socket
创建套接字:
socket.socket(family,type[,protocal])
使用给定的地址族、套接字类型、协议编号(默认为0)来创建套接字。
1. socket类型:
socket.AF_UNIX:只能够用于单一的Unix系统进程间通信
socket.AF_INET:服务器之间网络通信
socket.AF_INET6:IPv6
socket.SOCK_STREAM:流式socket,for TCP
socket.SOCK_DGRAM:数据报式socket,for UDP
socket.RAW:原始套接字。利用原始套接字:
- 可以处理普通的套接字无法处理的ICMP、IGMP等网络报文;
- 可以处理特殊的IPv4报文;
- 可以通过IP_HDRINCL套接字选项由用户构造IP头
socket.SOCK_SEQPACKET:可靠的连续数据包服务
例如:
创建TCP socket: s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
创建UDP socket: s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
2. socket函数
服务器函数:
s.bind(address):将套接字绑定到地址,在AF_INET下,以元祖(host,port)的形式表现地址
s.listen(backlog):开始监听TCP连接。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数。至少为1
s.accept():接收TCP连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发生数据。address是连接客户端的地址。
客户端函数:
s.connect(address):连接到address处的套接字。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误
s.connect_ex(address):功能与connect(address)相同,但是成功返回0,失败返回errno的值
公共函数:
s.recv(bufsize[,flag]):接收TCP套接字的数据。数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他消息,常忽略
s.send(string[,flag]):发送TCP数据。将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小
s.sendall(string[,flag]):完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常
s.recvfrom(bufsize[,flag]):接收UDP套接字的数据。与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址
s.sendto(string[,flag],adress):发送UDP数据。将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数
s.close():关闭套接字
3. 实例
Server:
#-*- coding: UTF-8 -*- __author__ = ''
__date__ = '2016/1/27' import socket HOST,PORT = '',8888 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind((HOST,PORT))
s.listen(1)
print "Serving HTTP on host %s..." % HOST
print "Serving HTTP on port %s..." % PORT while True:
client_conn,client_addr = s.accept()
request = client_conn.recv(1024)
print request
http_response = """
HTTP/1.1 200 OK Hello C!
"""
print client_conn.sendall(http_response) client_conn.close()
运行:
E:\Py\testing>python module/sock-s.py
Serving HTTP on host ...
Serving HTTP on port 8888..
WEB浏览器:
TCP连接成功,正常会话!
telnet会话:
telnet 127.0.0.1 8888
Client:
#-*- coding: UTF-8 -*- __author__ = ''
__date__ = '2016/1/27' import socket s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(("127.0.0.1",8888))
s.send("Hello S")
print s.recv(1024) s.close()
运行:
E:\Py\testing>python module/sock-c.py HTTP/1.1 200 OK Hello C!
python模块—socket的更多相关文章
- Python模块 Socket
一个简单的python socket编程 一.套接字 套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象.它们允许程序接受并 ...
- python模块——socket (实现简单的C/S架构端通信操作CMD)
# 服务端代码#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "loki" import socket impo ...
- python模块——socket
实例一. server: #socket套接字(IP + 端口号)(qq,wechat 发送接收消息依靠socket模块),cs架构import socketserver = socket.socke ...
- python模块之socket
43.python模块之socket: Python在网络通讯方面功能强大,学习一下Socket通讯的基本方式 UDP通讯: Server: import socket port=8081 ...
- 老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具
老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具 poptest是业内唯一的测试开发工程师培训机构,测试开发工程师主要是为测试服务开发测试工具,在工作中要求你做网络级别的安全 ...
- python中socket模块详解
socket模块简介 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.socket通常被叫做"套接字",用于描述IP地址和端口,是一个通信 ...
- Python基于socket模块实现UDP通信功能示例
Python基于socket模块实现UDP通信功能示例 本文实例讲述了Python基于socket模块实现UDP通信功能.分享给大家供大家参考,具体如下: 一 代码 1.接收端 import ...
- 使用 Python 的 Socket 模块构建一个 UDP 扫描工具
译文:oschina 英文:bt3gl 当涉及到对一些目标网络的侦察时,出发点无疑是首先发现宿主主机.这个任务还可能包含嗅探和解析网络中数据包的能力. 几周前,我曾经谈到了如何使用Wireshark来 ...
- Python底层socket库
Python底层socket库将Unix关于网络通信的系统调用对象化处理,是底层函数的高级封装,socket()函数返回一个套接字,它的方法实现了各种套接字系统调用.read与write与Python ...
随机推荐
- chrome浏览器的桌面通知
最近在使用朋友网(不加链接,避免有打广告的嫌疑),发现会出现提示“是否允许网站显示桌面通知?”,如下图所示: 这种做法,在页面加载完时直接调用请求,比起开心网的这种提示感觉有些野蛮了.开心网的桌面通知 ...
- MAVEN项目,Eclipse启动报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
由于是maven项目,tomcat在发布项目的时候没有同时发布maven依赖所添加的jar包,所以报此错误: 解决办法: 项目右键 —> 属性 -> Deployment Assembly ...
- iOS断点及打印日志
首先,最简单的断点就是在Xcode项目文件中任意一行行号那点一下,就是加了一个断点 再次点击会变成浅蓝色,表示disable掉了 disable掉的断点不会起作用,但会在左上角蓝色的标签那留下记录,这 ...
- js学习心得(一)(菜鸟)
js基础已经打了好几次了,慕课跟着学了一遍,视频看了一些,还读了诸如 jsdom艺术,js精粹以及锋利jq(没读完). 这次再次重头读并写一遍代码,工具书是js,查缺补漏高级程序设计第二版,犀牛书有点 ...
- Python基础之 urllib模块urlopen()与urlretrieve()的使用方法详解。
Python urllib模块urlopen()与urlretrieve()的使用方法详解 1.urlopen()方法urllib.urlopen(url[, data[, proxies]]) ...
- mysql server advanced 5.6基于oracle linux 6.6的安装
mysql 安装有两种,rpm安装和源码包安装,两种包都可以从www.mysql.com官网下载,这次我测试下rpm安装方式. 1.安装环境以及mysql版本: 1.1vcenter 虚拟机环境 1. ...
- YACC基本用法
YACC文件格式 yacc文件分为三部分: ... definitions ...(%{}%) %%... rules ...%% ... subroutines ... 定义部分 第一部分包括标 ...
- jquery.validate的效验方式
jQuery校验官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation 原文地址:http://www.cnblogs.c ...
- 推荐大家使用的CSS书写规范、顺序(转载)
转自:http://www.admin10000.com/document/2979.html 写了这么久的CSS,但大部分前端er都没有按照良好的CSS书写规范来写CSS代码,这样会影响代码的阅读体 ...
- SSM整合中遇到的不能扫描注解的bug
我的开发环境为: ubuntu14.04LTS 64bit; Spring Tool Suite 3.5.0.RELEASE Maven 3.2.3 SSM整合中遇到的不能扫描注解的bug 最终解决 ...