Python 网络编程(一)

Socket(套接字):

始于Unix,即人们所说的BSD Unix。socket家族有两种:基于文件系统的和基于网络的。第一种是基于文件系统的,地址家族表示为:AF_UNIX(或AF_LOCAL);第二种是网络Socket,是基于网络的,地址家族表示为AF_INET(AF_INET6表示ipv6)。

在Python 2.5 中加入了一种 Linux 套接字的支持:AF_NETLINK(无连接[见下])套接字家族让用户代码与内核代码之间的 IPC 可以使用标准 BSD 套接字接口。Python 只支持 AF_UNIX,AF_NETLINK,和 AF_INET 家族。

       根据套接字类型,可以分为面向连接的和无连接的。

  面向连接的,在通讯之前需建立一条连接,这种通讯方式提供了顺序的,可靠的,不会重复的数据传输,而且也不会被加上数据边界。实现这种连接的主要协议就是传输控制协议(即 TCP),其对应的套接字类型为 SOCK_STREAM。套接字使用 Internet 协议(IP)来查找网络中的主机,即TCP/IP协议来支持面向连接套接字。

  无连接的,无需建立连接就可以进行通讯。实现这种连接的主要协议就是用户数据报协议(即 UDP) ,指定套接字类型为 SOCK_DGRAM。套接字使用 Internet 协议来查找网络中的主机,即UDP/IP协议来支持无连接套接字。

1. socket()模块函数

  创建socket()套接字的语法如下:

  socket(socket_family, socket_type, protocol=0)

  socket_family一般为AF_UNIX或者AF_INET,socket_type可以是SOCK_STREAM或者SOCK_DGRAM,protocol一般不填,默认为0。

  由于socket模块中有太多的属性,这里使用"from socket import *"以减少代码长度。

  创建一个TCP/IP的套接字:

  tcpsocket = socket(AF_INET, SOCK_STREAM)

  同样的,创建一个UDP/IP的套接字:

  udpsocket = socket(AF_INET, SOCK_DGRAM)

2.套接字对象方法                                        来自:https://blog.csdn.net/eastmount/article/details/48909861
       下面是最常用的套接字对象方法:
       服务器端套接字函数

socket类型

描述

s.bind()

绑定地址(主机号 端口号对)到套接字

s.listen()

开始TCP监听

s.accept()

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

       客户端套接字函数

socket类型

描述

s.connect()

主动初始化TCP服务器连接

s.connect_ex()

connect()函数扩展版本,出错时返回出错码而不是跑出异常

       公共用途的套接字函数

socket类型

描述

s.recv()

接受TCP数据

s.send()

发送TCP数据

s.sendall()

完整发送TCP数据

s.recvfrom()

接受UDP数据

s.sendto()

发送UDP数据

s.getpeername()

连接到当前套接字的远端地址(TCP连接)

s.getsockname()

获取当前套接字的地址

s.getsockopt()

返回指定套接字的参数

s.setsockopt()

设置指定套接字的参数

s.close()

关闭套接字

        面向模块的套接字函数

socket类型

描述

s.setblocking()

设置套接字的阻塞与非阻塞模式

s.settimeout()

设置阻塞套接字操作的超时时间

s.gettimeout()

得到阻塞套接字操作的超时时间

        面向文件的套接字函数

socket类型

描述

s.fileno()

套接字的文件描述符

s.makefile()

创建一个与套接字关联的文件对象


        提示:在运行网络应用程序时,如果能够使用在不同的电脑上运行服务器和客户端最好不过,它能让你更好理解通信过程,而更多的是方位localhost或127.0.0.1.

 

iServer

#coding:utf-8
from socket import *

s = socket(AF_INET,SOCK_STREAM)    #创建一个TCP/IP的套接字
s.bind(('',6666))                  #绑定地址(主机名、端口号)到套接字
s.listen(1)                        #开启Tcp监听
sock,addr = s.accept()             #被动接受TCP客户端连接,(阻塞式)等待连续的到来
print 'connected by ',addr
sock.send('welcome to iChunqiu')   #发送TCP数据
text = sock.recv(1024)             #接收TCP数据
print text
sock.close()
s.close()

iClient

#coding:utf-8
from socket import *

c = socket(AF_INET,SOCK_STREAM)
c.connect(('127.0.0.1',6666))
text = c.recv(1024)
print text
c.send('Hello iChunqiu')
c.close()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值