2017-06-01 20 views
0

私は単純なEthernetServerの例をarduinoにインストールしました。私はセットアップIPアドレスとMACアドレスを持っています。私はPCからArduinoにpingできますが、単純なJavaプログラムからデータを送信することはできません。ここでArduinoイーサネットシールド+ Javaソケット接続

はアルドゥイーノからのソースです:

#include <SPI.h> 
#include <Ethernet.h> 

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 
byte ip[] = { 172, 16, 201, 218 };  


EthernetServer server = EthernetServer(8080); 

void setup() 
{ 
    Serial.begin(9600); 
    Ethernet.begin(mac, ip); 

    server.begin(); 
    Serial.print("My IP address: "); 
    Serial.println(Ethernet.localIP()); 
} 

void loop() 
{ 
    // if an incoming client connects, there will be bytes available to read: 
    EthernetClient client = server.available(); 
    if (client == true) { 
    // read bytes from the incoming client and write them back 
    // to any clients connected to the server: 
    server.write(client.read()); 
    } 
} 

私は私が手のコードを実行すると: enter image description here

を、私は、コマンドプロンプトからのArduinoにpingを実行することができます

C:\WINDOWS\system32>ping 172.16.201.218 

Pinging 172.16.201.218 with 32 bytes of data: 
Reply from 172.16.201.218: bytes=32 time<1ms TTL=128 
Reply from 172.16.201.218: bytes=32 time<1ms TTL=128 
Reply from 172.16.201.218: bytes=32 time<1ms TTL=128 
Reply from 172.16.201.218: bytes=32 time<1ms TTL=128 

Ping statistics for 172.16.201.218: 
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 
Approximate round trip times in milli-seconds: 
    Minimum = 0ms, Maximum = 0ms, Average = 0ms 

C:\WINDOWS\system32> 

クライアントにJavaは:

package ardsocket; 

import java.io.*; 
import java.net.*; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class ArdSocket { 

    public static void main(String args[]) throws IOException { 
     final String host = "172.16.201.218"; 
     final int portNumber = 8080; 
     System.out.println("Creating socket to '" + host + "' on port " + portNumber); 

     while (true) { 
      Socket socket = new Socket(host, portNumber); 
      BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
      PrintWriter out = new PrintWriter(socket.getOutputStream(), true); 

      System.out.println("server says:" + br.readLine()); 

      BufferedReader userInputBR = new BufferedReader(new InputStreamReader(System.in)); 
      String userInput = userInputBR.readLine(); 

      out.println(userInput); 

      System.out.println("server says:" + br.readLine()); 

      if ("exit".equalsIgnoreCase(userInput)) { 
       socket.close(); 
       break; 
      } 
     } 
    } 

} 

Javaソースを実行しても何も起こりません。 また、IP上のTelnetとポート8080に接続しようとすると同じ話です。

私は間違って何をしていますか?

答えて

1

私のコードはJavaに役立ちます。

import java.io.BufferedReader; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 
    import java.io.PrintWriter; 
    import java.net.InetAddress; 
    import java.net.Socket; 

public class GateControl { 
    public static void main(String []args) { 
     try { 
      // "192.168.1.177" is a IP of Server 
      Socket s = new Socket("192.168.1.177", 80); 
      InetAddress add = s.getInetAddress(); 
      System.out.println("Connected to " + add); 

      PrintWriter pw = new PrintWriter(s.getOutputStream()); 
      // "?butonon" is a content which you send to server 
      pw.println("GET /?buttonon HTTP/1.1"); 
      pw.println(""); 
      pw.println(""); 
      pw.flush(); 
      System.out.println("Request sent"); 

      BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); 
      System.out.println(br.readLine()); 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 
} 
0

out.println(userInput);out.flush();を入れてみてくださいデバッグ目的

#include <SPI.h> 
#include <Ethernet.h> 

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 
byte ip[] = { 172, 16, 201, 218 };  


EthernetServer server = EthernetServer(8080); 

void setup() 
{ 
    Serial.begin(9600); 
    Ethernet.begin(mac, ip); 

    server.begin(); 
    Serial.print("My IP address: "); 
    Serial.println(Ethernet.localIP()); 
} 

void loop() 
{ 
    // if an incoming client connects, there will be bytes available to read: 
    EthernetClient client = server.available(); 
    if (client == true) { 
    // Client Connected 
    Serial.println("Client Connected."); 
    server.write(client.read()); 
    } 
} 

とJavaクライアントでのためにArduinoのスケッチにログを追加し、私はあなたがループ内SocketBufferedReaderPrintWriterを作成する必要はありませんだと思います。それらを上に移動することができます。

package ardsocket; 

import java.io.*; 
import java.net.*; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class ArdSocket { 

    public static void main(String args[]) throws IOException { 
     final String host = "172.16.201.218"; 
     final int portNumber = 8080; 
     System.out.println("Creating socket to '" + host + "' on port " + portNumber); 

     Socket socket = new Socket(host, portNumber); 
     BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
     PrintWriter out = new PrintWriter(socket.getOutputStream(), true); 

     BufferedReader userInputBR = new BufferedReader(new InputStreamReader(System.in)); 

     while (true) { 
      System.out.println("server says:" + br.readLine()); 

      String userInput = userInputBR.readLine(); 

      out.println(userInput); 
      out.flush(); 

      System.out.println("server says:" + br.readLine()); 

      if ("exit".equalsIgnoreCase(userInput)) { 
       socket.close(); 
       break; 
      } 
     } 
    } 

} 
+0

Shazinありがとう、私はあなたのコードをコピーしましたが、まだ問題は残ります。またarduinoにLANケーブルで私のPCだけを接続しようとしている。私はそれをpingすることができますが、Arduinoとの間でデータを送受信することはできません。 – Ferguson

関連する問題