如何在Android App客户端和Hercules服务器之间设置套接字

问题描述

https://www.coderzheaven.com/2017/05/01/client-server-programming-in-android-send-message-to-the-client-and-back/

我从本教程中将Client的代码复制到了android应用中,这就是发生的情况。 当我单击客户端上的“连接到服务器”时,发生的一切只是在Hercules窗口中增加了客户端数量,但没有其他任何事情发生,除了两条消息随应用程序的时间而更新

client count

app messages

当我尝试从Hercules终端向应用程序发送消息时,也没有任何反应,但是发送的数据窗口在Hercules中更新

Java代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {


public static final int SERVERPORT = 11111111; // Obviously this is my real port #

public static final String SERVER_IP = "xxx.xxx.x.xxx"; // Obviously this is my real IP
private ClientThread clientThread;
private Thread thread;
private LinearLayout msgList;
private Handler handler;
private int clientTextColor;
private EditText edMessage;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    setTitle("Client");
    clientTextColor = ContextCompat.getColor(this,R.color.colorPrimaryDark);
    handler = new Handler();
    msgList = findViewById(R.id.msgList);
    edMessage = findViewById(R.id.edMessage);
}

public TextView textView(String message,int color) {
    if (null == message || message.trim().isEmpty()) {
        message = "<Empty Message>";
    }
    TextView tv = new TextView(this);
    tv.setTextColor(color);
    tv.setText(message + " [" + getTime() + "]");
    tv.setTextSize(20);
    tv.setPadding(0,5,0);
    return tv;
}

public void showMessage(final String message,final int color) {
    handler.post(new Runnable() {
        @Override
        public void run() {
            msgList.addView(textView(message,color));
        }
    });
}

@Override
public void onClick(View view) {

    if (view.getId() == R.id.connect_server) {
        msgList.removeAllViews();
        showMessage("Connecting to Server...",clientTextColor);
        clientThread = new ClientThread();
        thread = new Thread(clientThread);
        thread.start();
        showMessage("Connected to Server...",clientTextColor);
        return;
    }

    if (view.getId() == R.id.send_data) {
        String clientMessage = edMessage.getText().toString().trim();
        showMessage(clientMessage,Color.BLUE);
        if (null != clientThread) {
            clientThread.sendMessage(clientMessage);
        }
    }
}

class ClientThread implements Runnable {

    private Socket socket;
    private BufferedReader input;

    @Override
    public void run() {

        try {
            InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
            socket = new Socket(serverAddr,SERVERPORT);

            while (!Thread.currentThread().isInterrupted()) {

                this.input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String message = input.readLine();
                if (null == message || "Disconnect".contentEquals(message)) {
                    Thread.interrupted();
                    message = "Server Disconnected.";
                    showMessage(message,Color.RED);
                    break;
                }
                showMessage("Server: " + message,clientTextColor);
            }

        } catch (UnknownHostException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }

    }

    void sendMessage(final String message) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    if (null != socket) {
                        PrintWriter out = new PrintWriter(new BufferedWriter(
                                new OutputStreamWriter(socket.getOutputStream())),true);
                        out.println(message);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

}

String getTime() {
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
    return sdf.format(new Date());
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (null != clientThread) {
        clientThread.sendMessage("Disconnect");
        clientThread = null;
    }
}

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...