一、Socket

socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)

socket和file的区别:

  • file模块是针对某个指定文件进行【打开】【读写】【关闭】
  • socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】

【第八章】:Socket

1、信息交互的程序

服务端:

#server端

import socket

ip_port = ("127.0.0.1",9999)    #服务器端ip和服务端口
server = socket.socket()            #创建server
#server = <socket.socket fd=344, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>

server.bind(ip_port)                #绑定地址ip
#server = <socket.socket fd=344, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999)>
server.listen(5)                    #开始监听,允许5个客户端排队
conn,addr = server.accept()         #等待连接
#conn = <socket.socket fd=340, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999),
#  raddr=('127.0.0.1', 60086)>
#addr = ('127.0.0.1', 60086)

client_data = conn.recv(1024)       #收取信息,1024字节
#client_data = b'hello'
conn.sendall(client_data.upper())           #发送数据

conn.close()                        #关闭程序

客户端:

#client端

import socket

ip_port = ("127.0.0.1",9999)        #要连接的服务器IP和端口
client = socket.socket()             #创建client

client.connect(ip_port)              #连接服务器端
info = "hello"

client.sendall(info.encode("utf-8"))   #发送数据包,把str转换为bytes类型
server_data = client.recv(1024)         #收取数据包

print(server_data.decode("utf-8"))

注:如果客户端发送空字符给服务端,客户端发送没有问题,但是服务器是不会接受空字符的,服务器依然会停留在接受状态,程序会一直卡着

 

2、功能介绍

server = socket.socket()

参数一:地址簇

  socket.AF_INET IPv4(默认)
  socket.AF_INET6 IPv6

  socket.AF_UNIX 只能够用于单一的Unix系统进程间通信

参数二:类型

  socket.SOCK_STREAM  流式socket , for TCP (默认)
  socket.SOCK_DGRAM   数据报式socket , for UDP

  socket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。
  socket.SOCK_RDM 是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。
  socket.SOCK_SEQPACKET 可靠的连续数据包服务

参数三:协议

  0  (默认)与特定的地址家族相关的协议,如果是 0 ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议
详情

相关文章:

  • 2021-07-06
  • 2021-10-30
  • 2021-12-02
  • 2021-09-04
  • 2021-07-17
  • 2021-08-12
  • 2021-11-14
  • 2022-12-23
猜你喜欢
  • 2021-07-20
  • 2021-10-15
  • 2021-11-18
相关资源
相似解决方案