python socket服务端,python socket编程之双方相互通信简单实例

  python socket服务端,python socket编程之双方相互通信简单实例

  本文主要介绍python在客户端和服务器端的通信。文章用python中的socket来介绍细节,有一定的参考价值,需要的朋友可以参考一下。

  00-1010一、套接字通信条件:IP和端口镜像比喻二。客户实施流程三。服务器实现流程四。示范五.实施持续沟通流程前言:

  今天教大家通过Python编写Socket network(做聊天程序),可以实现不同主机(电脑)之间的调用。

  具体效果如何,接着往下看:

  可以看到客户端(上)向服务器(下)发送内容,服务器回复。

  [备注:客户端是我的电脑,服务器是另一台主机(阿里云服务器)]

  检验两台主机的目的:的两台主机能否相互通信。

  

目录

 

  首先简单介绍一下什么是socket。socket(简称socket)是进程间通信的一种方式。socket与其他进程间通信的一个主要区别是,它可以实现不同主机之间的进程间通信。

  我们网络上的各种服务大多是基于Socket来完成通信的,比如浏览网页,用QQ聊天,收发邮件等等。

  简单的说:套接字可以实现不同主机之间的通信。

  

一、socket

 

  相信大家对ip都不熟悉。每个主机都有一个ip。不同主机之间通信的第一个前提是ip可以互访。另外,还有一个条件是端口可用,比如端口80、端口3306、端口8080等。也就是我们经常听到的。

  主机中的数据是通过端口发送和接收的,所以需要打开相应的端口才能进行通信。

  

socket通信的条件:IP和端口

 

  Ip相当于家庭地址,端口相当于门或窗。

  例子:

  (主机A)快递员要把快递(数据)送到你(另一个主机B)那里,需要知道你的家庭地址(主机B的ip)。到你家门口后,需要打开门(主机B的端口)去取快递(数据)。

  这里需要划分服务器和客户端,客户端发送(主机A),服务器接收(主机B)。当然,每台主机可以充当两个角色(既是客户端又是服务器),这样两台主机就可以互相发送和接收。

  看到这里,相信大家都知道socket在实现不同主机之间通信的大致意义了。让我们开始Python代码实现。

  

形象比喻

 

  先来分析客户端(主机A)的实现过程:

  从套接字导入*

  # 1.创建一个套接字

  tcp_socket=socket(AF_INET,SOCK_STREAM)

  # 2.准备连接到服务器并建立连接

  Serve_ip=服务器端(主机B)的ip

  Serve_port=8000 #端口,比如8000。

  Tcp _ socket.connect ((serve _ IP,serve _ port)) #连接到服务器并建立连接。参数是元组形式的。

  首先与服务器接收方(主机B)建立连接,连接条件(主机B的ip和端口),其中端口8000是指向主机B发送数据的端口(主机B会监听端口8000,然后接收数据)。

  #准备要传输的数据

  Send_data=今天是2021年8月29日。“陈大哥向服务器发送数据”

  TCP _ socket . send(send _ data . encode( gbk ))

  #从服务器接收数据

  #注意这个1024byte,大小可以根据你的需要设置。

  from _ server _ msg=TCP _ socket . recv(1024)

  #添加。解码( gbk )解决乱码。

  print(from_server_msg.decode(

  "gbk"))

  #关闭连接

  tcp_socket.close()

  send_data是往服务器端(主机B)发送的内容,from_server_msg是服务器端(主机B)往客户端(主机A)发送的内容

  客户端的代码就结束了

  

 

  

三、服务器实现过程

 

  分析服务器端(主机B)的实现过程:

  

from socket import *

 

  服务器端(主机B)ip可以留空(默认本机),端口8000(因为客户端往8000端口发送数据,所以服务器需要监听的端口也是8000,与客户端的端口一致)

  

# 创建接收

 

  

client_socket用来为这个客户端服务,相当于的tcp_server套接字的代理

 

  from_client_msgs 是服务器端(主机B)接收到来自客户端(主机A)发送过来的数据send_data 是服务器端(主机B)往客户端(主机A)发送过去的数据

  服务器端的代码就结束了

  提醒:服务器端的8000端口需要开启,不然无法进行通信

  

 

  

四、演示

 

  先启动(执行)服务器端(主机B)的程序,再执行客户端(主机A)

  

 

  可以看到客户端(上方)向服务器端(下方)发送了内容,服务器端进行了回复

  

发送和响应内容:

 

  客户端发送:今天是2021年08月29日,辰哥给服务器端发送数据了

  服务器端接收并回复给客户端:客户端你好,服务器端收到,公众号【Python研究者】

  

 

  

 

  

五、实现持续通信过程

 

  上方动图演示的是客户端和服务端的一次通信过程,可以将客户端的发送和服务端的接收放到循环中,实现持续通信过程。

  客户端:

  

while(1):

 

  服务端:

  

  while(1):   #接收对方发送过来的数据   from_client_msg = client_socket.recv(1024)#接收1024给字节,这里recv接收的不再是元组,区别UDP   if(from_client_msg=="exit"):   break   print("接收的数据:",from_client_msg.decode("gbk"))   now_time = time.strftime(%Y-%m-%d %H:%M:%S, time.localtime(time.time()))   #发送数据给客户端   send_data = client_socket.send((str(now_time)+" 服务端:客户端你好,服务器端收到,公众号【Python研究者】").encode("gbk"))   #关闭套接字   #关闭为这个客户端服务的套接字,就意味着为不能再为这个客户端服务了   #如果还需要服务,只能再次重新连  client_socket.close()

 

  客户端可以持续给服务端发送数据,服务器接收数据后打印并返回数据给客户端

  

服务端返回的内容:

 

  当前系统时间+服务端:客户端你好,服务器端收到

  

 

  最后当客户端输入:exit,则断开与服务端的连接:

  

 

  到此这篇关于python利用socket实现客户端和服务端之间进行通信 的文章就介绍到这了,更多相关python主机通信内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: