socket实现公网服务端客户端通信(python版)

socket其实是可以走公网实现外部通信的,具体的流程如以下:

1.首先购买一个最便宜的阿里云(其它云大同小异)的云服务器,系统最好选择linux—ubuntu的系统,然后在系统里面上传你的服务器端python程序 ,要上传和下载文件可以用一个超好用工具 finalshell 真的特别好用,适合小白

json_send.py 主函数  注意:这里的ip地址填写分配给你的私有地址,主页面下方可以找到,端口可以自己通过安全组设置,就是设置开放哪个端口可用,自己去查

import os
import  socket
import json
import send
import time
class Data():
	def __init__(self,raspberryID,lasiodermaCount,lasiodermaID,currentTime,temperature,humidity,alarmSig1,alarmSig2,qrCode,remainingPower,warningImg):
		self.data_names = ['raspberryID','lasiodermaCount','lasiodermaID','currentTime','temperature','humidity',
					 'alarmSig1','alarmSig2','qrCode','remainingPower','warningImg']
		self.raspberryID = raspberryID
		self.lasiodermaCount = lasiodermaCount
		self.lasiodermaID = lasiodermaID
		self.CurrentTime = CurrentTime
		self.temperature = temperature
		self.humidity = humidity
		self.alarmSig1 = alarmSig1
		self.alarmSig2 = alarmSig2
		self.qrCode = qrCode
		self.remainingPower = remainingPower
		self.warningImg = warningImg

		self.data = [self.raspberryID,self.lasiodermaCount,self.lasiodermaID,
			   self.CurrentTime,self.temperature,self.humidity,self.alarmSig1,self.alarmSig2,self.qrCode,self.remainingPower,self.warningImg]
		
	def Json(self):
			
		data_dic = {key:value for key, value in zip(self.data_names,self.data)}
		return json.dumps(data_dic)
	
	def data_send(self):
		
		#Ip ='192.168.0.82'
		Ip = '127.0.0.1'
		Port= 8083
		
		
		data_json = self.Json()
		
		send.send_data(data_json,Ip,Port)
		
		return 'done'
		
		
if __name__=='__main__':
	raspberryID = 'No.1'
	lasiodermaCount = '5'
	lasiodermaID = str(['1','2','3'])
	CurrentTime = '2020/6/1 10:12:30'
	temperature = '28'
	humidity = '40.2%'
	alarmSig1 = '1'
	alarmSig2 = '1'
	qrCode = str([lasiodermaID,lasiodermaCount,CurrentTime])
	remainingPower = '20%'
	f = open('2.txt')
	warningImg = f.read()
	#AlarmImg = []
while 1:
		Data_send = Data(raspberryID,lasiodermaCount,lasiodermaID,CurrentTime,temperature,humidity,alarmSig1,alarmSig2,qrCode,remainingPower,warningImg)
		msg = Data_send.data_send()
		print(msg)
				
			
		
		
		
		
		
		

send.py  主函数调用

#!coding=utf-8
 
import os
import sys
import struct
import socket
import json
def send_data(data,Ip='192.168.0.82',Port=8083):

	try:
	    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
	    
	    s.bind((Ip,Port))
	    print("successful")
	except socket.error as msg:
	    print (msg)
	    sys.exit(1)
	
	s.listen()
	
	conn,addr=s.accept()

	if data:

		data_new = bytes(data.encode('utf-8'))
		'''while 1:
			data_send = data_new.read(1024)
			if not data_send:
				print ('file send over...')
				break
			conn.send(data_send)'''
		conn.sendall(data_new)
	    # 关闭当期的套接字对象
		data = []
	s.close()

#repr()

2.在本地运行客户端程序 这里填写的ip地址是云服务器的公网地址,端口和云端设置的端口一样,这边设置的是每休眠10秒接受一次数据

 

# -*- coding: utf-8 -*-
"""
Created on Tue Jun  1 10:47:36 2021

@author: Jimmy_ouyang
"""


#模拟服务端

import os
import time
import  socket
sk=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sk.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

address=('127.0.0.1',8083)
sk.connect(address)
BASE_DIR=os.path.dirname(os.path.abspath(__file__))#获取绝对路径

print('waiting......')


while True:
	
	data=sk.recv(1024)


	if  data:
		print(data)
	else:    
		#print("receive over")

		time.sleep(10)
		continue


sk.close()

 

3.注意事项 要先开启云服务器上的服务端,开始循环监听以后 再开启本地的客户端,就实现了公网socket通信

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Python中的socket模块来实现客户端服务端之间的通信客户端通过socket连接到服务端并发送数据,服务端接收客户端发来的数据并进行处理,并可以通过socket将处理后的结果返回给客户端。通过这种方式,客户端服务端之间可以实现双向通信。 ### 回答2: Socket是一种网络通信协议,可以在不同的计算机之间进行通信。它是一种基于TCP和UDP协议实现网络通信方式,支持点对点或一对多的通信。使用Socket协议可以实现客户端服务端之间的通信,通常客户端请求服务端提供某种服务,服务端响应客户端的请求,并返回相应的数据。 在使用Socket实现客户端服务端通信之前,需要先建立连接。服务端需要开启一个Socket服务,绑定IP地址和端口号。客户端需要知道服务端IP地址和端口号,才能向服务端发起连接请求。当完成连接之后,客户端服务端之间就可以进行通信了。 在通信过程中,客户端需要向服务端发送数据,服务端接收数据并处理,然后再返回相应的数据给客户端客户端需要接收服务端返回的数据,并进行相应的处理。客户端服务端通信可以使用TCP协议或UDP协议。TCP协议是一种可靠的协议,保证数据的完整性和准确性;UDP协议则是一种不可靠的协议,数据可能会丢失或乱序。 使用Socket实现客户端服务端之间的通信可以应用于很多领域,如网络游戏、即时通讯、文件传输等等。Socket协议可以灵活地适应各种需求,并能够快速地传输数据,提高通信的效率。因此,在开发网络应用程序时,Socket是一种非常重要的通信方式。 ### 回答3: Socket可以理解为一种协议,是一种通过网络连接进行通信的方式。它是一种众所周知的网络编程接口,可用于在计算机网络实现进程之间的通信实现客户端服务端通信的基本流程如下: 1. 服务端启动,指定监听端口,并等待客户端连接请求。 2. 客户端启动,通过指定服务端IP地址和端口号发起连接请求。 3. 服务端接收到连接请求,建立连接并返回一个新的Socket描述符,用于与该客户端通信。 4. 客户端收到服务端的响应,建立连接并返回一个新的Socket描述符,用于与该服务端通信。 5. 服务端客户端通过各自的Socket描述符进行消息交换,直到通信结束。 下面是一个简单的示例,用Python实现客户端服务端通信服务端代码: ```python import socket # 创建一个TCP/IP socket对象 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定地址,指定要监听的端口号 server_addr = ('localhost', 9999) server_socket.bind(server_addr) # 开始监听客户端请求 server_socket.listen(5) print('listening for client...') while True: # 等待客户端连接 client_socket, client_addr = server_socket.accept() print('client {} connected.'.format(client_addr)) # 接收客户端发送的数据 while True: data = client_socket.recv(1024) if not data: break print('received data from client:', data) # 发送响应数据给客户端 msg = 'ack from server: {}'.format(data) client_socket.sendall(msg.encode('utf-8')) # 关闭连接 client_socket.close() ``` 客户端代码: ```python import socket # 创建一个TCP/IP socket对象 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 指定服务端IP地址和端口号 server_addr = ('localhost', 9999) # 连接服务端 client_socket.connect(server_addr) # 发送数据给服务端 msg = 'Hello World!' client_socket.sendall(msg.encode('utf-8')) # 接收服务端发送的响应数据 data = client_socket.recv(1024) print('received data from server:', data.decode('utf-8')) # 关闭连接 client_socket.close() ``` 通过以上代码,我们可以看到服务端客户端建立连接后,在相互发送数据后,双方会及时响应并关闭连接。在实际开发中,我们可以根据实际需求,设计并实现功能丰富的通信协议,以便更加灵活高效地进行数据交换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值