利用Python进行socket网络编程,实现树莓派与Ubuntu(16.04)之间的简单的网络聊天

标题 目标:

采用socket编程,完成两个树莓派之间、或者树莓派与Ubuntu系统之间的网络文字通信(或聊天)

分析:
首先我们需要了解socket编程的原理以及它是怎么实现的。
Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原义那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,下面这张图片很好地表述了socket实现的过程。
利用Python进行socket网络编程,实现树莓派与Ubuntu(16.04)之间的简单的网络聊天_第1张图片图片来源于百度百科
语言选择
我所用的是Python,其他语言(c,c++,Java,php等)的网络编程应该网上有很多,我个人爱好用Python,刚好最近也在学习Python的一些知识。那我们可以进入到Python官方提供的关于socket函数中去看

https://docs.python.org/3/library/socket.html

现在开始写代码
根据我们的需求:实现两台设备之间的网络聊天。我写的比较简单,就是一台设备发送一条消息,只有接收到消息后才能再发送(即一人一次只能发送一条消息,需对方回复后再发送第二条消息)
接下来直接上代码,写的简单,也没进行优化,可改度也不大。

服务器端
import socket
import datetime
import time
host = socket.gethostname()
port = 12345
Arr=(host,port)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(Arr)
s.listen(1)
sock,addr = s.accept()
print('Connection Success1')
info = sock.recv(1024).decode()
while info != 'exit':
  print('Client:'+info)
  now='--'+datetime.datetime.ctime(datetime.datetime.now())
  send_mes =input()+ str(now)
  sock.send(send_mes.encode())
  if send_mes =='exit':
    break
  info = sock.recv(1024).decode()
sock.close()
s.close()

然后是客户端`

import socket
s= socket.socket()
host = "这里是你要连接的主机ip地址"
port = 12345
Arr=(host,port)
s.connect(Arr)
print('Linked Success!')
info = ''
while info != 'exit':
  print('Server:'+info)
  send_mes=input()
  s.send(send_mes.encode())
  if send_mes =='exit':
    break
  info = s.recv(1024).decode()
s.close()

然后就可以简单的聊天了。

你可能感兴趣的:(Python)