博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python模块—socket
阅读量:6892 次
发布时间:2019-06-27

本文共 2525 字,大约阅读时间需要 8 分钟。

创建套接字:

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:

1 #-*- coding: UTF-8 -*- 2  3 __author__ = '007' 4 __date__ = '2016/1/27'    5  6 import socket 7  8 HOST,PORT = '',8888 9 10 11 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)12 #s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)13 s.bind((HOST,PORT))14 s.listen(1)15 print "Serving HTTP on host %s..." % HOST16 print "Serving HTTP on port %s..." % PORT17 18 while True:19     client_conn,client_addr = s.accept()20     request = client_conn.recv(1024)21     print request22     http_response = """23 HTTP/1.1 200 OK24 25 Hello C!26 """27     print client_conn.sendall(http_response)28 29     client_conn.close()

运行:

E:\Py\testing>python module/sock-s.pyServing HTTP on host ... Serving HTTP on port 8888..

WEB浏览器:

  TCP连接成功,正常会话!

telnet会话:

telnet 127.0.0.1 8888

Client:

1 #-*- coding: UTF-8 -*- 2  3 __author__ = '007' 4 __date__ = '2016/1/27' 5  6 import socket 7  8 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 9 10 s.connect(("127.0.0.1",8888))11 s.send("Hello S")12 print s.recv(1024)13 14 s.close()

 运行:

E:\Py\testing>python module/sock-c.pyHTTP/1.1 200 OKHello C!

转载于:https://www.cnblogs.com/andr01la/p/5158918.html

你可能感兴趣的文章
安装多个版本的unity
查看>>
Unity 脚本的未来发展
查看>>
给vs2010安装上cocos2d-x的模版
查看>>
ffmpeg-20160908[09,10,13,15,19,21,22,24]-bin.7z
查看>>
【java】java处理随机浮点数(小数点后两位)用RMB的大写数值规则输出
查看>>
jquery键盘事件
查看>>
MFC学习之EDIT控件初始化
查看>>
luogu P1972 [SDOI2009]HH的项链 树状数组
查看>>
关于UWP数据绑定的一个坑 x:bind修改为binding
查看>>
线程的状态
查看>>
IDEA小插件之快速修改Maven多模块的工程版本
查看>>
Programming C#.Classes and Objects.成员方法
查看>>
《大道至简》读后感03
查看>>
分布式系统---幂等性设计
查看>>
把“数字的字符串”转换成“整数”时遇到的小麻烦
查看>>
消耗系统内存
查看>>
mysql-connector-c++ 编译安装
查看>>
A - Space Elevator(动态规划专项)
查看>>
mysql使用存储过程和event定期删除
查看>>
基于python3+opencv3图像基础IO操作
查看>>