Android로 소켓 프로그래밍에 대해 배우고 있습니다. 두 대의 모바일 장치가 있습니다. 둘 다 다른 WiFi 네트워크에 연결됩니다. 내 서버 앱이 하나의 기기에서 실행 중이고 클라이언트 앱이 다른 기기에서 실행 중입니다. 다른 WiFi 네트워크가있는 서버에 클라이언트를 연결할 수 없습니다. 왜?
불쌍한 의사 소통에 큰 도움이됩니다.다른 WiFi 네트워크의 소켓 서버에 소켓 클라이언트를 연결할 수 없습니다.
클라이언트 코드 :
class ClientSideThread extends Thread {
String response;
@Override
public void run() {
try {
socket = new Socket("192.168.1.111",8085);
OutputStream outToServer = socket.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
out.writeUTF("hi");
InputStream inFromServer = socket.getInputStream();
DataInputStream in = new DataInputStream(inFromServer);
response = in.readUTF();
out.close();
in.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
response = "UnknownHostException: " + e.toString();
} catch (IOException e) {
e.printStackTrace();
response = "IOException: " + e.toString();
}
}
}
서버 코드 : 당신은 그들이 두 개의 서로 다른 WiFi 네트워크에 있는지 언급
private class SocketServerThread extends Thread {
@Override
public void run() {
try {
serverSocket = new ServerSocket(socketServerPORT);
while (true) {
Socket socket = serverSocket.accept();
sIpAddress = socket.getInetAddress();
sPort = socket.getPort();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
StringBuilder sb = new StringBuilder();
if ((line = reader.readLine()) != null) {
sb.append(line);
}
message = sb.toString();
printWriter = new PrintWriter(socket.getOutputStream());
printWriter.println(message);
printWriter.flush();
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
String sDisplayMsg = "Replay:" + message;
TextView rowTextView = new TextView(MainActivity.this);
rowTextView.setText(sDisplayMsg);
linearLayout.addView(rowTextView);
}
});
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
서버가 포트를 수신하고 클라이언트가 연결 요청을 보내고 있는지 확인 했습니까? –
예 클라이언트 코드에서 소켓 시간 초과 예외가 발생했습니다. – Siddharthan
클라이언트 측에서 출력 스트림을 쓸 수 없을 때 발생할 수 있습니다. 서버 측의 socketServerPORT 대신 포트 번호 8085를 하드 코드하십시오. –