最近需要一个公网的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 += 1
numTotal +=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则关闭socket
if "quit" in data.decode():
break
# 关闭socket
client_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