什么是socket编程?

什么是socket编程?

在计算机网络中,osi网络体系层次结构有七层,而我们常见的有五层网络体系结构。如下图所示
计算机网络体系结构
而socket编程可以理解为在应用层和运输层之间的抽象层。应用层与传输层之间通过socket所提供的接口进行通信。
socket 其实就是操作系统提供给程序员操作「网络协议栈」的接口,说人话就是,你能通过socket 的接口,来控制协议找工作,从而实现网络通信,达到跨主机通信。协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,它们两会接受应用层的委托执行收发数据的操作。协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。此外 IP 中还包括 ICMP 协议和 ARP 协议。ICMP 用于告知网络包传送过程中产生的错误以及各种控制信息。ARP 用于根据 IP 地址查询相应的以太网 MAC 地址。IP 下面的网卡驱动程序负责控制网卡硬件,而最下面的网卡则负责完成实际的收发操作,也就是对网线中的信号执行发送和接收操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Socket编程是一种用于网络通信的编程方式,它允许进程在不同的计算机上通过网络进行通信。Socket编程的优势在于可以实现跨平台、跨语言的通信,同时也提供了高度灵活的网络通信接口。 在Python中,可以使用内置的socket模块进行Socket编程。下面是一个最简单的例子,实现了两个进程间的通信: ```python # server.py import socket s = socket.socket() host = socket.gethostname() port = 12345 s.bind((host, port)) s.listen(5) while True: c, addr = s.accept() print('Got connection from', addr) c.send('Thank you for connecting'.encode()) c.close() # client.py import socket s = socket.socket() host = socket.gethostname() port = 12345 s.connect((host, port)) print(s.recv(1024).decode()) s.close() ``` 在Python中,可以使用多线程实现Socket编程,这样可以实现同时处理多个客户端请求,提高程序的并发性和性能。需要注意的是,在多线程Socket编程中需要使用线程锁等机制来保证程序的安全性。 阻塞式Socket和非阻塞式Socket是指在进行网络通信时是否会阻塞程序的执行。阻塞式Socket会在进行网络通信时一直等待,直到操作完成,而非阻塞式Socket则会在进行网络通信时立即返回,并由程序自行决定下一步操作。 在Python中,可以使用select函数进行Socket编程,它可以同时监听多个Socket对象,并在有数据到达时立即返回。下面是一个简单的例子: ```python import socket import select s1 = socket.socket() s2 = socket.socket() host = socket.gethostname() port1 = 12345 port2 = 12346 s1.bind((host, port1)) s1.listen(5) s2.bind((host, port2)) s2.listen(5) inputs = [s1, s2] while True: rs, ws, es = select.select(inputs, [], []) for r in rs: if r in [s1, s2]: c, addr = r.accept() inputs.append(c) else: data = r.recv(1024) if not data: inputs.remove(r) else: print(data) ``` 在这个例子中,程序会同时监听两个Socket对象,并在有数据到达时立即返回。当有新的连接请求时,程序会将新的Socket对象添加到监听列表中,当已有的连接断开时,程序会将其从监听列表中移除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值