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,所以這倆要同時。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章