我有一个TCP客户端,目前正在作为终端工作。所以我可以手动发送消息给服务器。但这只是为了测试。
但是我需要与tcp服务器进行持续的通信。我有不同的片段来显示不同的数据。并且依赖于我希望发送消息的片段。对片段的归属消息始终是相同的。
示例:
如果片段1在GUI上处于活动状态:Message1,Answer1,M2,A2,M3,A3,M1,A1,M2,A2 ......
如果片段2在GUI上有效:M5,A5,M6,A6,M7,A7,M5,A5 ....
所以消息总是在重复,服务器的答案将在GUI上显示
我该怎么做?
TCP客户端代码:
public class Client {
public static String ServerIP = "192.168.0.10";
public static int ServerPort = 35000;
// message to send to the server
private String mServerMessage;
// sends message received notifications
private OnMessageReceived mMessageListener = null;
// while this is true, the server will continue running
private boolean mRun = false;
// used to send messages
private OutputStream mBufferOut;
// used to read messages from the server
private BufferedReader mBufferIn;
/**
* Constructor of the class. OnMessagedReceived listens for the messages received from server
*/
public Client(OnMessageReceived listener) {
mMessageListener = listener;
}
/**
* Sends the message entered by client to the server
*
* @param message text entered by client
*/
public void sendMessage(String message) {
if (mBufferOut != null ) {
try {
mBufferOut.write((message + "\r\n").getBytes());
mBufferOut.flush();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
/**
* Close the connection and release the members
*/
public void stopClient() {
Log.i("Debug", "stopClient");
// send mesage that we are closing the connection
//sendMessage(Constants.CLOSED_CONNECTION + "Kazy");
mRun = false;
if (mBufferOut != null) {
try {
mBufferOut.flush();
mBufferOut.close();
} catch (Exception e)
{
e.printStackTrace();
}
}
mMessageListener = null;
mBufferIn = null;
mBufferOut = null;
mServerMessage = null;
Log.i("Debug", "disconnected");
}
public void run() {
mRun = true;
try {
//here you must put your computer's IP address.
InetAddress serverAddr = InetAddress.getByName(ServerIP);
Log.e("TCP Client", "C: Connecting...");
//create a socket to make the connection with the server
Socket socket = new Socket(serverAddr, ServerPort);
try {
Log.i("Debug", "inside try catch");
//sends the message to the server
mBufferOut = socket.getOutputStream();
//receives the message which the server sends back
mBufferIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
MainActivity.ColorBoxHandler.sendEmptyMessage(0);
while (mRun) {
mServerMessage = mBufferIn.readLine();
if (mServerMessage != null && mMessageListener != null) {
//call the method messageReceived from MyActivity class
mMessageListener.messageReceived(mServerMessage);
}
}
Log.e("RESPONSE FROM SERVER", "S: Received Message: '" + mServerMessage + "'");
} catch (Exception e) {
Log.e("TCP", "S: Error", e);
} finally {
//the socket must be closed. It is not possible to reconnect to this socket
// after it is closed, which means a new socket instance has to be created.
socket.close();
MainActivity.ColorBoxHandler.sendEmptyMessage(1);
}
} catch (Exception e) {
Log.e("TCP", "C: Error", e);
}
}
//Declare the interface. The method messageReceived(String message) will must be implemented in the MyActivity
//class at on asynckTask doInBackground
public interface OnMessageReceived {
public void messageReceived(String message);
}
}