arduino与esp8266结合制作氛围灯(三)

这次咱们说说再服务器端怎么搞

我上一个文档说了发送tcp报文的代码,所以只需要做一个小的修改(改一下目的IP),开一下端口。如果用的阿里云的服务器,记得在控制策略那里开一下端口哦

我在服务器端准备用py写,然后写了一个,发现效果还行,上代码

import threading
import socket
 
 
encoding = 'utf-8'
BUFSIZE = 1024
 
 
# a read thread, read data from remote
class Reader(threading.Thread):
    def __init__(self, client):
        threading.Thread.__init__(self)
        self.client = client
        
    def run(self):
        while True:
            data = self.client.recv(BUFSIZE)
            if(data):
                string = bytes.decode(data, encoding)
                print(string, end='')
            else:
                break
        print("close:", self.client.getpeername())
        
    def readline(self):
        rec = self.inputs.readline()
        if rec:
            string = bytes.decode(rec, encoding)
            if len(string)>2:
                string = string[0:-2]
            else:
                string = ' '
        else:
            string = False
        return string
 
 
# a listen thread, listen remote connect
# when a remote machine request to connect, it will create a read thread to handle
class Listener(threading.Thread):
    def __init__(self, port):
        threading.Thread.__init__(self)
        self.port = port
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.sock.bind(("0.0.0.0", port))
        self.sock.listen(0)
    def run(self):
        print("listener started")
        while True:
            client, cltadd = self.sock.accept()
            Reader(client).start()
            cltadd = cltadd
            print("accept a connect")
 
 
lst  = Listener(9011)   # create a listen thread
lst.start() # then start
 

然后我又写了一个java,个人感觉还是用java比较好,因为我阿里云服务器上安装了java环境,懒得搞py了,而且两者代码量差不多。

上java代码


import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.ServerSocket;
import java.net.Socket;

public class test {

	       public static void main(String args[]) throws IOException {
	          //为了简单起见,所有的异常信息都往外抛
	          int port = 702;
	          //定义一个ServerSocket监听在端口上
	          ServerSocket server = new ServerSocket(port);
	          System.out.println("start");
	          //server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的
	          Socket socket = server.accept();
	          //跟客户端建立好连接之后,我们就可以获取socket的InputStream,并从中读取客户端发过来的信息了。
	          Reader reader = new InputStreamReader(socket.getInputStream());
	          //char chars[] = new char[60]; 
	          int len;
                  int k=1;
	          StringBuilder sb = new StringBuilder();
	          while (k>0 ) {
       		     char chars[] = new char[60]; 
                     len=reader.read(chars);
	             //sb.append(new String(chars, 0, len)); 
                     //reader.read(chars);
                     //k+=2;
                     System.out.println(chars);
                     System.out.println("-----------------");
                     //System.out.println("from client: " + sb);
	          }
	          
	          
	          
	          reader.close();
	          socket.close();
	          server.close();
	       }
	       
	    
}

这两个代码,异曲同工,大致都是,开端口监听,然后收到字符串,就这样。。

然后注意一点就是,你硬件开了tcp往服务端传数据的时候,服务端必须开启监听端口来监听。不然esp8266就会报error,所以这俩要同时。

基本上说的也就是这些了。自己慢慢摸索就好了。

发布了12 篇原创文章 · 获赞 19 · 访问量 5499

猜你喜欢

转载自blog.csdn.net/Hao_ge_666/article/details/103706122