1.简单了解socket

        通过计算机操作系统的知识我们知道进程与进程之间是相互隔离的,所以为了让进程之间可以通信,提供了几种进程通信的方式:1.信号;2.信号量;3.socket;4.共享内存;5.消息队列;6.pipe(管道)。这些方式在不同的场景和需求下有各自的特点和适用性。其中socket(套接字)是一种在计算机网络中实现的进程间通信的方式。它允许不同计算机上的进程之间通过网络进行数据交换和通信。又因为它是通过网络的,所以它不仅可以实现在同一计算机内的进程间通信,也可以实现在不同计算机之间的进程间通信。


2.通过python实现

        python中有一个socket模块,这个模块提供了一些函数可以实现socket网络编程。首先,我们先熟悉一下面socket网络编程需要用到的函数:

        1.socket() 用于创建一个socket(套接字)对象,即  变量名 = socket.socket()。

        2.bind() 用于将套接字绑定到特定的地址和端口,同时,这个函数需要使用元组来传递需要绑定的地址和端口;通常第一个是ip地址,第二个是端口。

        3.listen() 用于监听连接的请求;listen(10),参数10是指允许最大的未决连接数,即排队队列客户端数。注意:C/S需要在同一个端口

        4.accept() 用于接受连接并建立与客户端通信的套接字。使用 accept()接受连接请求并返回一个新的套接字对象s和连接的客户端地址s_ip ,即 s, s_ip = *.accept()。

        5.recv() 用于从套接字接受数据。s.recv(1024)表示从套接字中最多接受1024字节的数据。这个函数接收到的是bytes类型的数据。

        6.sendall() 用于向套接字发送数据。

        7.clase() 用于关闭套接字。

        这些函数通常都是需要用到的函数。下面,我们在linux的centos7环境下写一个简单的socket网络编程。使用C/S架构

        2.1 socket-server

                2.1.1简单步骤:

python——socket网络编程_客户端

                 2.1.2 编写实例:

# 创建socket对象
sk = socket.socket()

# 绑定ip和端口
sk.bind( ("0.0.0.0",8999) )

# 设置监听,排队队列客户端数
sk.listen(10)

# 进入一个堵塞状态(什么事情都不做,等着),等着客户端的连接
conn, addr = sk.accept()

print("hello")

# conn 为客户端的socket对象
print(f'conn is:{conn}')
# addr 为客户端的端口和地址
print(f'addr is:{addr}')

# recv接收客户端的内容,接收到的是bytes类型数据
while 1:
	accept_data = conn.recv(1024)
	print(f"接收到的内容是:{accept_data.decode('utf8')}")
	# 可以向客户端发送,发送的数据也要为bytes的类型
	send_data = input("你要发送的内容是:\n")
	conn.sendall(bytes(send_data, encoding="utf8"))

# 关闭连接 (可关可不关)
conn.close()

        2.2 socket-client

                2.2.1简单步骤:

python——socket网络编程_服务器_02

                 2.2.2 编写实例:

import socket

sk = socket.socket()

# 连接服务器
sk.connect( ("127.0.0.1",8999) )

while 1:
	send_data = input("客户端,发送的内容是:")
	sk.sendall(bytes(send_data, encoding="utf8"))
	accept_data = sk.recv(1024)
	print(f"客户端接收的内容是: {accept_data}")
sk.close()

        2.3 测试

                若是先运行客户端,但需要连接的服务器又没有运行,这样会出现报错;所以先将服务器运行起来,然后再运行客户端连接服务器。没有出现报错之后,就可以实现C/S之间的相互通信了。

python——socket网络编程_服务器_03

python——socket网络编程_套接字_04

        温馨提示:基于网络知识我们可以知道:(1) 0.0.0.0 是用于指定服务器绑定到所有可用网络接口的地址,用于接受来自任何 IP 的连接请求。(2) 127.0.0.1 是指向本地主机的回环地址,用于本地主机内部进行网络通信。 注意0.0.0.0 和 127.0.0.1 都不能用于在 Internet 上进行实际的网络通信。

        这样就成功使用python实现了socket网络编程。