最近需要一个公网的TCP服务端平台来做4G模组的发包测验,通讯猫(http://www.tongxinmao.com/App/Detail/id/1)貌似使用不了,就干脆在自己的腾讯云上搭建了简单的TCP服务端。
我们搭建可以在服务器上使用Python、Java、C#等语言自行编写服务器程序。
目前是使用python脚本实现的,在linux上安装python环境后,防火墙开放相应端口,拷贝下面的程序,运行起来即可,下面代码是使用python2环境运行。客服端是在单片机上实现的代码,服务端即运行下面的代码,连接成功后,客服端发送1024个字节‘a’到服务端,服务端回复10个字节’a’到客服端。
#coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
from socket import *host = ''
port = 8013
numTotal = 0
numError = 0
send_string = 'a' * 10# 创建server socket
server_socket = socket(AF_INET,SOCK_STREAM)# 绑定socket监听地址
server_addr = (host,port)
server_socket.bind(server_addr)# 开始监听,最大允许连接数5
server_socket.listen(5)# 处理连接请求
try:while True:print('waiting for connect...')#阻塞等待客户端的连接 client_socket, client_addr = server_socket.accept()# 连接成功后,打印客户端信息print('a client connnect from:', client_addr)while(True):# 向客户端发送数据# client_socket.send('Hello, client!'.encode())client_socket.send(send_string)# 接收客户端的数据data = client_socket.recv(1024)# 判断是否所有字符都是 'a'all_a = all(char == 'a' for char in data)if all_a != True or len(data) != 1024:numError += 1numTotal +=1 #print("%r" % all_a)print("%r" % len(data))#print('recv data is ', data.decode('gb2312'))#print('recv data is 111', data.encode('gb2312'))# 接收到quit则关闭socketif "quit" in data.decode():break# 关闭socketclient_socket.close()server_socket.close()print("socket closed.")break
except:print('numTotal is ', numTotal-223)print('numError is ', numError-223)client_socket.close()server_socket.close()print("socket closed.")
搭建好服务端后,可以在电脑上使用网络助手来验证功能是否正常:
如果没有正常中断服务,python程序再次运行,可能会报以下错误:
使用 lsof -i:8013 (相应端口号) 查询哪个占用,再kill掉相应进程,如果不管用,就等待5-10分钟再操作或者重启服务器吧。
参考:https://blog.51cto.com/u_13640625/3028086