我开发了TCP / IP连接 . 我为客户端和Java PC应用程序做了一个Android应用程序,两者都运行良好 . 但它就像一个点对点的结构 . 如何将编码修改为服务器 - 客户端响应,如果我向服务器发送了一个字符串,服务器应通过向客户端发送另一个字符串来响应客户端而没有客户端的IP /端口,客户端捕获字符串并在屏幕上打印它
服务器代码:
static Socket socket,s;
static ServerSocket serverSocket;
static InputStreamReader inputStreamReader;
static BufferedReader bufferedReader;
static String message;
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
.
.
.
// Receive Request from Client
try {
serverSocket = new ServerSocket(5000);
while (true)
{
socket = serverSocket.accept();
inputStreamReader = new InputStreamReader(socket.getInputStream());
bufferedReader = new BufferedReader(inputStreamReader);
message = bufferedReader.readLine();
System.out.println(message);
jTextArea1.setText(message);
jButton1.doClick();
}
} catch (IOException ex) {
ex.printStackTrace();
}
.
.
.
.
//Sent Response to Client
try {
s = new Socket("197.70.107.167",7400);
PrintWriter pw = new PrintWriter(s.getOutputStream());
pw.write(sendData.getText());
pw.flush();
pw.close();
s.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
static Socket socket;
static ServerSocket serverSocket;
static InputStreamReader inputStreamReader;
static BufferedReader bufferedReader;
Handler h = new Handler();
.
.
.
.
public void sendData(View view) {
Thread myThread = new Thread(new MyServerThread());
myThread.start();
message = getIPAddress(true) + " - " + e1.getText().toString();
BackgroundTask bt = new BackgroundTask();
bt.execute();
Toast.makeText(getApplicationContext(), "Data Sent", Toast.LENGTH_LONG).show();
}
@SuppressLint("StaticFieldLeak")
class BackgroundTask extends AsyncTask<String, Void, Void> {
Socket socket;
PrintWriter printWriter;
@Override
protected Void doInBackground(String... voids) {
try {
socket = new Socket(ip, port); // Connect to Socket | Port: 5000
printWriter = new PrintWriter(socket.getOutputStream()); // Set the Output Stream
printWriter.write(message); // Send message through the Socket
printWriter.flush();
printWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
class MyServerThread implements Runnable {
@Override
public void run() {
try {
serverSocket = new ServerSocket(7400);
while (true) {
socket = serverSocket.accept();
inputStreamReader = new InputStreamReader(socket.getInputStream());
bufferedReader = new BufferedReader(inputStreamReader);
message = bufferedReader.readLine();
h.post(new Runnable() {
@Override
public void run() {
responseData.setText(message);
}
});
}
} catch (IOException e) {
e.printStackTrace();
}
}
}