socket

socket是应用层与TCP/IP协议通信的中间软件抽象层,一组接口.将复杂的tcp/ip协议组隐藏在socket接口后面,无需理解tcp/udp协议,只需遵循socket的规定去编程.

套接字有两种,分别是基于文件型和基于网络型的AF_UNIX,AF_INET

服务器端首先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接.

客户端初始化Socket,连接服务器,连接成功客户端与服务器连接建立

服务器套接字函数

s.bind() 绑定(主机,端口号)到套接字

s.listen() 开始tcp监听

s.accept() 被动接受tcp客户的连接(阻塞式)等待连接的到来

客户端套接字函数

s.connect()  主动初始化tcp服务器连接

s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常

公共用途的套接字函数

s.recv()  接收tcp数据

s.send()  发送tcp数据(send在发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完)

s.sendall() 发送完整的tcp数据(本质是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时,数据不丢失,循环调用send直到发完)

s.recvfrom()  接收udp数据

s.sendto()  发送udp数据

s.getpeername() 连接到当前套接字的远端的地址

s.getsockname() 当前套接字的地址

s.getsockopt() 返回指定套接字的参数

s.setsockopt() 设置指定套接字的参数

s.close() 关闭套接字

面向锁的套接字方法

s.setblocking()  设置套接字的阻塞与非阻塞模式

s.settimeout()  设置阻塞套接字操作的超时时间

s.gettimeout() 得到阻塞套接字操作的超时时间

面向文件的套接字的函数

s.fileno()  套接字的文件描述符

s.makefile()  创建一个与该套接字相关的文件

基于tcp的套接字

tcp是基于链接的,必须先启动服务端,然后在启动客户端去链接服务端

 1 tcp服务端
 2 
 3 复制代码
 4 1 ss = socket() #创建服务器套接字
 5 2 ss.bind()      #把地址绑定到套接字
 6 3 ss.listen()      #监听链接
 7 4 inf_loop:      #服务器无限循环
 8 5     cs = ss.accept() #接受客户端链接
 9 6     comm_loop:         #通讯循环
10 7         cs.recv()/cs.send() #对话(接收与发送)
11 8     cs.close()    #关闭客户端套接字
12 9 ss.close()        #关闭服务器套接字(可选)
13 复制代码
14 tcp客户端
15 
16 1 cs = socket()    # 创建客户套接字
17 2 cs.connect()    # 尝试连接服务器
18 3 comm_loop:        # 通讯循环
19 4     cs.send()/cs.recv()    # 对话(发送/接收)
20 5 cs.close()            # 关闭客户套接字
tcp

基于udp的套接字

udp是无链接的,先启动哪一端都不会报错

 1 udp服务端
 2 
 3 1 ss = socket()   #创建一个服务器的套接字
 4 2 ss.bind()       #绑定服务器套接字
 5 3 inf_loop:       #服务器无限循环
 6 4     cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送)
 7 5 ss.close()                         # 关闭服务器套接字
 8 udp客户端
 9 
10 cs = socket()   # 创建客户套接字
11 comm_loop:      # 通讯循环
12     cs.sendto()/cs.recvfrom()   # 对话(发送/接收)
13 cs.close()                      # 关闭客户套接字
udp

 

转载于:https://www.cnblogs.com/suncunxu/p/10174365.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值