ヘイホ、
私の問題は、説明するのが少し難しいです。Android タブレット (4.0.3) を RS-232 コンバーターに接続しようとしています。それはすでに機能していますが、一方向のみです。何かを送信しようとすると、送信されます。返事はもらえませんが、これは必要です。私はこれを得る
Logcat Errors: Either Socket is not bound, or EADRESS already in use.
複数の方法を試しましたが、必要に応じて機能するものはありませんでした。
私の目標:バイトが送信されるたびに送信および受信します。
私のアーキテクチャ: MainActivity -> 2 つの Asynctasks を呼び出す 1. ネットワーク、2. ConcurrentServer ネットワークは、DataOutputStream 経由でコマンドを送信する必要があります。ここで大丈夫です。ConcurrentServer は、DataInputStream で受信データを受け取り、ConcurrentServer クラスのメソッドに渡す必要があります。このメソッドは、アンサーバイトを送信する必要があります。
私の ConcurrentServer は受信せず、メソッドは何も送信しません...
私はあなたがそれで私を助けてくれることを願っています.
コード:
package com.example.wettkampftimerbt;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
import org.apache.http.client.protocol.ClientContext;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
public class ConcurrentServer extends AsyncTask<Void, Void, Void>{
private final String LFDNR1 = "lfdnr1";
private final String LFDNR2 = "lfdnr2";
private final String LFDNR3 = "lfdnr3";
private final String LFDNR4 = "lfdnr4";
private final String LFDNR5 = "lfdnr5";
private final String LFDNR6 = "lfdnr6";
private final String LFDNR7 = "lfdnr7";
private final String LFDNR8 = "lfdnr8", PREFS_NAME = "prefs",
COMMAND = "command", LANE = "lane", DINYMIN ="dinymin", DINYSEK="dinysek";
int w1, w2, w3, w4, w5, w6, w7, w8, diny1, diny2, diny3, diny4, diny5,
diny6, diny7, diny8, dinymin, dinysek;
Context context;
ServerSocket sock;
Socket ss;
protected Void doInBackground (Void... arg0) {
System.out.println("ConcurrentServer_doInBackgorund");
Log.e("SERVER", "CON");
try {
sock = new ServerSocket(2010);
ss = sock.accept();
sock.setReuseAddress(true);
sock.bind(new InetSocketAddress(2010));
ss.setReuseAddress(true);
ss = new Socket("192.168.0.100", 2011);
sock.setSoTimeout(1000);
for (;;) {
boolean stopData = true;
BufferedReader din = new BufferedReader(new
InputStreamReader(ss.getInputStream()));
//DataInputStream din = new DataInputStream(
// ss.getInputStream());
while (stopData) {
// Einlesen
diny1 = (din).read();// 03
diny2 = (din).read();// Empfänger(90...97)
diny3 = (din).read();// Sender(80)
diny4 = (din).read();// lfdnr
diny5 = (din).read();// Kommando(Start, Stop...)
if (diny5==79){
dinymin = (din).read();//Minuten
dinysek = (din).read();//Sekunden
}
diny6 = (din).read();// Prüfsumme
diny7 = (din).read();// 05
din.close();
//ss.close();
//sock.close();
System.out
.println("diny: " + diny1 + " " + diny2 + " " + diny3
+ " " + diny4 + " " + diny5 + " " + diny6 + " "
+ diny7);
Log.e("Reccom", "RECCOM");
reccom();
stopData=false;
}
}
} catch (Exception e) {
System.out.println("IO error" + e);}
return null;
}
public int getLFDNR1(Context context) {
System.out.println("ConcurrentServer_getlfdnr1");
w1 = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE).getInt(LFDNR1, 00);
//w1 = Integer.valueOf(LFDNR1);
return w1;
}
public String getLFDNR2(Context context) {
System.out.println("ConcurrentServer_getlfdnr2");
w2 = Integer.valueOf(LFDNR2);
return LFDNR2;
}
public String getLFDNR3(Context context) {
System.out.println("ConcurrentServer_getlfdnr3");
w3 = Integer.valueOf(LFDNR3);
return LFDNR3;
}
public String getLFDNR4(Context context) {
System.out.println("ConcurrentServer_getlfdnr4");
w4 = Integer.valueOf(LFDNR4);
return LFDNR4;
}
public String getLFDNR5(Context context) {
System.out.println("ConcurrentServer_getlfdnr5");
w5 = Integer.valueOf(LFDNR5);
return LFDNR5;
}
public String getLFDNR6(Context context) {
System.out.println("ConcurrentServer_getlfdnr6");
w6 = Integer.valueOf(LFDNR6);
return LFDNR6;
}
public String getLFDNR7(Context context) {
System.out.println("ConcurrentServer_getlfdnr7");
w7 = Integer.valueOf(LFDNR7);
return LFDNR7;
}
public String getLFDNR8(Context context) {
System.out.println("ConcurrentServer_getlfdnr8");
w8 = Integer.valueOf(LFDNR8);
return LFDNR8;
}
private void reccom() throws IOException {
System.out.println("ConcurrentServer_reccom");
if (diny1 == 3 && diny7 == 5) {
answer();
} else {
}
switch (diny2) {
case (144): // 144=90=Bahn1
c144(context);
break;
case (145): // 145=91=Bahn2
c145(context);
break;
case (146): // 146=92=Bahn3
c146(context);
break;
case (147): // 147=93=Bahn4
c147(context);
break;
case (148): // 148=94=Bahn5
c148(context);
break;
case (149): // 149=95=Bahn6
c149(context);
break;
case (150): // 150=96=Bahn7
c150(context);
break;
case (151): // 151=97=Bahn8
c151(context);
break;
}
}
private void answer() throws IOException {
System.out.println("ConcurrentServer_answer");
Socket sock ;
int w0=0,w5=32;
SocketAddress sockaddr = new InetSocketAddress("192.168.0.100", 2011);
sock = new Socket();
int timeout = 1000; // 1000 millis = 1 second
sock.connect(sockaddr, timeout);
boolean stopData = true;
DataOutputStream dos = new DataOutputStream(sock.getOutputStream());
while (stopData) {
dos.writeByte(w0);
dos.writeByte(diny1);
dos.writeByte(diny3);
dos.writeByte(diny2);
dos.writeByte(diny4);
dos.writeByte(w5);
dos.writeByte(diny6);
dos.writeByte(diny7);
dos.flush();
//dos.close();
stopData = false;}
}
private void c151(Context context) {
System.out.println("ConcurrentServer_c151");
getLFDNR8(context);
if (w1 == diny4||(w1-1)==diny4)
switch (diny5) {
case (00):
case (79): {
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(LANE, "151").commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(COMMAND, "79").commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(DINYMIN, Integer.valueOf(dinymin).toString()).commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(DINYSEK, Integer.valueOf(dinysek).toString()).commit();
}
break;
}
else {
System.out.println("lfdnr8 passt nicht");
}
}
private void c150(Context context) {
System.out.println("ConcurrentServer_c150");
getLFDNR7(context);
if (w1 == diny4||(w1-1)==diny4)
switch (diny5) {
case (00):
case (79): {
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(LANE, "150").commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(COMMAND, "79").commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(DINYMIN, Integer.valueOf(dinymin).toString()).commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(DINYSEK, Integer.valueOf(dinysek).toString()).commit();
}
break;
}
else {
System.out.println("lfdnr7 passt nicht");
}
}
private void c149(Context context) {
System.out.println("ConcurrentServer_c149");
getLFDNR6(context);
if (w1 == diny4||(w1-1)==diny4)
switch (diny5) {
case (00):
case (79): {
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(LANE, "149").commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(COMMAND, "79").commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(DINYMIN, Integer.valueOf(dinymin).toString()).commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(DINYSEK, Integer.valueOf(dinysek).toString()).commit();
}
break;
}
else {
System.out.println("lfdnr6 passt nicht");
}
}
private void c148(Context context) {
System.out.println("ConcurrentServer_c148");
getLFDNR5(context);
if (w1 == diny4||(w1-1)==diny4)
switch (diny5) {
case (00):
case (79): {
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(LANE, "148").commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(COMMAND, "79").commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(DINYMIN, Integer.valueOf(dinymin).toString()).commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(DINYSEK, Integer.valueOf(dinysek).toString()).commit();
}
break;
}
else {
System.out.println("lfdnr5 passt nicht");
}
}
private void c147(Context context) {
System.out.println("ConcurrentServer_c147");
getLFDNR4(context);
if (w1 == diny4||(w1-1)==diny4)
switch (diny5) {
case (00):
case (79): {
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(LANE, "147").commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(COMMAND, "79").commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(DINYMIN, Integer.valueOf(dinymin).toString()).commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(DINYSEK, Integer.valueOf(dinysek).toString()).commit();
}
break;
}
else {
System.out.println("lfdnr4 passt nicht");
}
}
private void c146(Context context) {
System.out.println("ConcurrentServer_c146");
getLFDNR3(context);
if (w1 == diny4||(w1-1)==diny4)
switch (diny5) {
case (00):
case (79): {
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(LANE, "146").commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(COMMAND, "79").commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(DINYMIN, Integer.valueOf(dinymin).toString()).commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(DINYSEK, Integer.valueOf(dinysek).toString()).commit();
}
break;
}
else {
System.out.println("lfdnr3 passt nicht");
}
}
private void c145(Context context) {
System.out.println("ConcurrentServer_c145");
getLFDNR2(context);
if (w1 == diny4||(w1-1)==diny4)
switch (diny5) {
case (00):
case (79): {
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(LANE, "145").commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(COMMAND, "79").commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(DINYMIN, Integer.valueOf(dinymin).toString()).commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(DINYSEK, Integer.valueOf(dinysek).toString()).commit();
}
break;
}
else {
System.out.println("lfdnr2 passt nicht");
}
}
private void c144(Context context) {
System.out.println("ConcurrentServer_c144");
final String PREFS_NAME = "prefs";
final String COMMAND = "command";
final String LANE = "lane", DINYMIN ="dinymin", DINYSEK="dinysek";
getLFDNR1(context);
if (w1 == diny4||(w1-1)==diny4)
switch (diny5) {
case (00):
case (79): {
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(LANE, "144").commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(COMMAND, "79").commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(DINYMIN, Integer.valueOf(dinymin).toString()).commit();
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.edit().putString(DINYSEK, Integer.valueOf(dinysek).toString()).commit();
}
break;
}
else {
System.out.println(w1+ "+"+ diny4);
System.out.println("lfdnr1 passt nicht");
}
}
public ConcurrentServer(Context context) {
System.out.println("ConcurrentServer_Context");
this.context = context;
}
}
ネットワークコードも必要だと思われる場合は、教えてください。ところで:これは、多くのことを実験して試した後の私のコードです。したがって、何かが 2 倍になっている場合、これが理由です。私は Android の初心者であるという理由で、それは私に起こるかもしれません。
ありがとう。
編集:
Class Stacker によって提供されたこのリンクは非常に優れています。詳細かつ正確です。困っている人は、次のことを確認してください。
http://docs.oracle.com/javase/tutorial/networking/urls/index.html
クラススタッカーにもう一度感謝します!