Java 如何让TCP服务器将消息发送回客户端?
在客户端发送消息后,我完全不知道如何让我的服务器应用程序将消息发送回客户端。我的目标是客户端向服务器发送一条消息说“你好”,服务器接收到该消息,然后向客户端发送回“你好” 我的问题 如何设置发送消息的服务器部分和接收消息的客户端部分 我的服务器Java 如何让TCP服务器将消息发送回客户端?,java,android,Java,Android,在客户端发送消息后,我完全不知道如何让我的服务器应用程序将消息发送回客户端。我的目标是客户端向服务器发送一条消息说“你好”,服务器接收到该消息,然后向客户端发送回“你好” 我的问题 如何设置发送消息的服务器部分和接收消息的客户端部分 我的服务器 public class MainActivity extends Activity { private ServerSocket serverSocket; Handler updateConversationHandler; Thr
public class MainActivity extends Activity {
private ServerSocket serverSocket;
Handler updateConversationHandler;
Thread serverThread = null;
public String serverIP = "127.0.0.1";
private InetAddress serverAddr;
public static final int SERVERPORT = 4444;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
updateConversationHandler = new Handler();
this.serverThread = new Thread(new ServerThread());
this.serverThread.start();
}
class ServerThread implements Runnable {
public void run() {
Socket socket = null;
try {
serverSocket = new ServerSocket(SERVERPORT);
} catch (IOException e) {
e.printStackTrace();
}
while (!Thread.currentThread().isInterrupted()) {
try {
socket = serverSocket.accept();
CommunicationThread commThread = new CommunicationThread(socket);
new Thread(commThread).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class CommunicationThread implements Runnable {
private Socket clientSocket;
private BufferedReader input;
public CommunicationThread(Socket clientSocket) {
this.clientSocket = clientSocket;
try {
this.input = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
while (!Thread.currentThread().isInterrupted()) {
try {
String read = input.readLine();
updateConversationHandler.post(new updateUIThread(read));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class updateUIThread implements Runnable {
private String msg;
public updateUIThread(String str) {
this.msg = str;
}
@Override
public void run() {
recieved.setText("");
if (msg != null){
recieved.setText(recieved.getText().toString()+"message recieved: "+ msg + “\n”);
/* SEND MESSAGE */
}
}
}
}
我的客户
public class MainActivity extends Activity {
private Socket socket;
private static final int SERVERPORT = 4444;
public String serverIP= "127.0.0.1";
private InetAddress serverAddr;
private Timer myTimer;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setServerIP();
setContentView(R.layout.main);
new Thread(new ClientThread()).start();
}
public void sendVerifiedMessage(byte message) throws IOException {
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
out.println(message);
/* receive message from client */
}
public void run() {
sendVerifiedMessage(“hello”);
}
}
class ClientThread implements Runnable {
@Override
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName(serverIP);
socket = new Socket(serverAddr, SERVERPORT);
connected = true;
} catch (UnknownHostException e1) {
e1.printStackTrace();
connected = false;
} catch (IOException e1) {
connected = false;
e1.printStackTrace();
}
}
}
}
老实说,我并没有深入研究过这类事情,但如果您正在寻找一种在设备之间直接传递简单值的方法,我再次强烈建议您研究来自parse.com的推送通知。这样的解决方案将更高效地使用电池,并且可以在任何网络上工作
不过,在这两个设备上实现服务器/客户机代码应该是可能的。听起来您已经设法向一个方向发送了消息,然后要发送响应,完全相同的方法应该在另一个方向工作。看不出原因。移动设备之间的通信是一个复杂的问题,除非在开放的本地网络上。您可能需要查看GCM Google Cloud Messaging或parse.com,以便在您的设备之间发送推送消息。谢谢,它是在开放的本地网络上运行的。你认为我可以把客户端也包括在服务器中,服务器也包括在客户端中吗?我不确定是否可以实现这样的直接通信。我注意到的是ip 127.0.0.1,通常用作环回ip,指向设备本身,因此可能有所不同。要获取手机的本地ip,请转到设置->关于手机->状态我在应用程序中有一个设置选项,用于获取和设置ip。连接设备不是问题。它只是向客户端发送一条消息。我不知道怎么编码