python3:用代码演示Socket和Server 实现通信.

版权声明:转载 或者复制请标注来源 https://blog.csdn.net/qq_34979346/article/details/83958419

这个是 socket编程的流程,socket 的本质是个编程接口,它把应用层和传输层进行了连接。
Socket编程

连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。

  1. 服务器监听
    是指 服务器端socket一直是开放的状态,随时等待客户端发来请求 服务器端socket一直是开放的状态
    ,随时等待客 户端发来请求, 并不定位具体的客户端,而是处于等待连接的状态,实时监控网络状态。
  2. 客户端请求
    是指由客户端的socket提出连接请求,要连接的目标是服务器端的socket。
    为此,客户端的socket必须首先描述它要连接服务器的socket,指出服务器端socket的地址和端口号,
    然后就向服务器端socket提出连接请求。
  3. 连接确认
    是指当服务器端监听到或者说接收到客户端的连接请求,它就响应客户端的请求,
    建立一个新的线程,把服务器端的描述发 给客户端,一旦客户端确认了此描述,连接就建立好了
    而服务器端socket继续处于监听状态,继续接收其他客户端套接字的连接请求。

客户端发出请求,服务端接受并处理,并返回给相应客户端,客户端接受之后也可以继续发给服务器,
如果一直不断掉,这就是聊天系统的机制。

这个和http的请求不一样,http 是只能保持一次会话就要断掉。

为了讲清楚用代码演示上边的流程:

先写个服务端的socket 解释在代码备注内,请详细看下.

import  socket

server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#第一个参数是指协议族,决定了socket的地址类型,在通信中必须采用对应的地址。AF_INET决定了要用ipv4地址。
#第二个参数是指:Socket类型,决定是面向连接还是无连接,流式Socket(SOCK_STREAM)是一种面向连接的Socket,

server.bind(("0.0.0.0",8000))

#第一个参数是指 IP 地址,第二个是 端口号,这个是为了更好的让客户端进行寻址。

server.listen()

#进行监听 客户端的socket 的请求

sock,addr=server.accept()

# 会返回两个值, 第一个是scoket对象 ,另一个是socket的地址

data=sock.recv(1024)

#接受获取的数据,并可以指定大小 1024字节是 1k 大小数据。

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

server.close()
#关闭

sock.close()
#关闭

我们只做了服务端,没有客户端 是不能完成通信的.

我们来写客户端

import  socket

client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#第一个参数是指协议族,决定了socket的地址类型,在通信中必须采用对应的地址。AF_INET决定了要用ipv4地址。
#第二个参数是指:Socket类型,决定是面向连接还是无连接,流式Socket(SOCK_STREAM)是一种面向连接的Socket,

client.connect(("127.0.0.1",8000))

#第一个参数是指 IP 地址,第二个是 端口号

client.send("Test".encode("utf-8"))
#客户端socket 发送数据给服务端

client.close()
#关闭连接,

服务器端打印出了 接受客户端发出来的请求 Test.

现在我们改编下,我们也让服务器端返回给客户端.

代码如下 :

服务端代码添加如下:

sock.send("Hello".encode("utf8"))
#服务端发送数据
server.close()

客服端的代码添加如下:

data=client.recv(1024)
#接受的数据
print(data.decode("utf8"))  
#打印结果
Hello

猜你喜欢

转载自blog.csdn.net/qq_34979346/article/details/83958419