AndroidデバイスをWindowsラップトップとUSBケーブルでクライアント/サーバーブリッジとして接続したいと考えています。私はJavaでクライアントコードを書いた。私のデバイスが私のWiFiモデムに接続され、私のラップトップもLANケーブルで接続されているとき、私はアプリケーションのデスクトップ上のデバイスIPをサーバーソケットに接続するためのアドレスとして設定します。しかし、私のWiFiモデムがオフで、私はAndroidデバイスとノートパソコンをUSBケーブルで接続したいと思っています。デバイスのIPアドレスが使用できないため、Androidデバイスに接続できません。AndroidデバイスにPCを接続してUSBケーブル経由でクライアント/サーバーリンクを形成
もう1つ質問:USBケーブルでIPアドレスでサーバとオープンソケットに接続できますか?
Androidのコード
public class ActivityMain extends AppCompatActivity {
private Button button ;
public static final int TIMEOUT = 10;
private String connectionStatus = null;
private Handler mHandler = null;
private ServerSocket serverSocket = null;
private Socket socket = null;
private ObjectOutputStream objectOutputStream;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
configure_button();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 10:
configure_button();
break;
default:
break;
}
}
void configure_button() {
// first check for permissions
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this, Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[] {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.INTERNET}, 10);
}
return;
}
//this code won't execute if permissions are not allower, because in the line above there is return statement.
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//initialize serverSocket socket in a new separate thread
new Thread(initializeConnection).start();
String msg = "Attempting to connect";
Toast.makeText(ActivityMain.this, msg, Toast.LENGTH_SHORT).show();
}
});
}
//threads
private final Runnable initializeConnection = new Thread(){
@Override
public void run() {
// initialize server socket
try {
serverSocket = new ServerSocket(38300);
serverSocket.setSoTimeout(ActivityMain.TIMEOUT * 1000);
//attempt to accept a connection
socket = serverSocket.accept();
objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
try {
while(true) {
for (int i = 0; i < 1000; i++) {
//objectOutputStream.reset();
objectOutputStream.writeObject("number" + i);
// objectOutputStream.writeBytes("number"+i);
System.out.println("send>" + "number" + i);
}
}
} catch (IOException ioException) {
//Log.e(ActivityMain.TAG, "" + ioException);
}
} catch (SocketTimeoutException e) {
connectionStatus = "Connection has timed objectOutputStream! Please try again";
// mHandler.post(showConnectionStatus);
}
catch(IOException e)
{
//Log.e(ActivityMain.TAG, ""+e);
}
if(socket != null)
{
connectionStatus = "Connection was succesful";
// mHandler.post(showConnectionStatus);
}
}
};
}
クライアントコード
public class CCC {
public static void main(String[] args)
{
System.out.println("hi");
Socket echoSocket = null;
ObjectOutputStream out = null;
ObjectInputStream in = null;
String message = "";
// Create socket connection with host address as localhost and port number with 38300
try
{
echoSocket = new Socket("192.168.1.19", 38300);
in = new ObjectInputStream(echoSocket.getInputStream());
// Communicating with the server
try
{
while(true){
message = (String) in.readObject();
System.out.println("server>" + message);
}
}
catch (ClassNotFoundException classNot)
{
System.err.println("data received in unknown format");
}
}
catch (UnknownHostException e)
{
System.err.println("Don't know about host: LocalHost.");
System.exit(1);
}
catch (IOException e)
{
System.err.println("Couldn't get I/O for " + "the connection to: LocalHost:");
System.exit(1);
}
finally
{
// Closing connection
try
{
in.close();
if (echoSocket != null)
{
echoSocket.close();
}
}
catch (IOException ioException)
{
ioException.printStackTrace();
}
}
}
}
私は、1秒毎にサーバからクライアントに位置データを送信する必要があります。
あなたの努力を私たちに教えてください。何か試しましたか?あなたはどこで失敗しましたか? – rupinderjeet
@rupinderjeetコードが追加されました。私はクライアント - サーバー間でWIFI接続を使用しています。私はAndroidデバイスのIPとiをテキストファイルに書き込んでおり、クライアントではテキストファイルを読み取り、サーバーに接続するためにIPを使用します。エラーが発生し、クライアントとサーバーに接続できません。 – Desert