python 网络编程四(套接字(socket)初使用)
套接字(socket
)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O
插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP
地址与端口的组合。
基于TCP协议的socket
tcp
是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端
实例来说明:
1 | # server服务器端 |
在重启服务端时可能会遇到:
解决方法:
1 | #加入一条socket配置,重用ip和端口 |
基于UDP协议的socket
udp
是无链接的,启动服务之后可以直接接受消息,不需要提前建立链接
实例说明:
1 | #server端 |
socket参数的详解
1 | socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None) |
创建socket
对象的参数说明:
family | 地址系列应为AF_INET(默认值),AF_INET6,AF_UNIX,AF_CAN或AF_RDS。(AF_UNIX 域实际上是使用本地 socket 文件来通信) |
---|---|
type | 套接字类型应为SOCK_STREAM (默认值),SOCK_DGRAM ,SOCK_RAW 或其他SOCK_ 常量之一。**SOCK_STREAM ** 是基于TCP 的,有保障的(即能保证数据正确传送到对方)面向连接的SOCKET ,多用于资料传送。 SOCK_DGRAM 是基于UDP 的,无保障的面向消息的socket ,多用于在网络上发广播信息。 |
proto | 协议号通常为零,可以省略,或者在地址族为AF_CAN 的情况下,协议应为CAN_RAW 或CAN_BCM 之一。 |
fileno | 如果指定了fileno ,则其他参数将被忽略,导致带有指定文件描述符的套接字返回。与socket.fromfd() 不同,fileno 将返回相同的套接字,而不是重复的。这可能有助于使用socket.close() 关闭一个独立的插座。 |