質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

解決済

ソケット通信においてPC-Android間の通信ができない

gken
gken

総合スコア4

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

2回答

0評価

1クリップ

488閲覧

投稿2021/11/03 11:33

編集2021/11/12 10:45

PC-Android間の通信を実現したい

TCPを使用したソケット通信にてクラスオブジェクトを送受信したいです。
【Java】TCP通信を利用したデータ送受信 | のんぽぐを参考にプログラミングの学習を進めています。このサイトではPC-PC間のソケット通信について書かれていると思いますが、PC-Android間での通信を実現したいです。

PC-Android間で
プログラムを実行したとき、実行結果に示したようになり、Server(PC側)のプログラムの24行目
UserInformation cIU =(UserInformation)objectInputStream.readObject();
が超えられません。eclipse上では問題や警告は出ていません。

ClassNotFoundExceptionで検索したのですが解決策が分かりません。
お力添えいただけないでしょうか。

Server画面(PC) 実行結果

java Server_ver3java.lang.ClassNotFoundException: com.websarva.wings.android.clientver3.UserInformation at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:720) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1925) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1808) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2099) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1625) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:465) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:423) at Server_ver3.main(Server_ver3.java:24)

該当のソースコード

###Serverプログラム(PC)

Java

package com.websarva.wings.android.clientver3; import java.io.IOException; import java.io.ObjectInputStream; import java.net.ServerSocket; import java.net.Socket; public class Server_ver3 { public static ServerSocket serverSocket = null; public static Socket socket =null; public static void main(String[] args) { ObjectInputStream objectInputStream = null; try { System.out.println("aaa");//デバッグのため serverSocket = new ServerSocket(2001); socket = serverSocket.accept(); System.out.println("bbb");//デバッグのため objectInputStream = new ObjectInputStream(socket.getInputStream()); System.out.println("ccc");//デバッグのため UserInformation cIU =(UserInformation)objectInputStream.readObject();//24行目 System.out.println("eee");//デバッグのため objectInputStream.close(); serverSocket.close(); System.out.println(cIU.current_latitude); System.out.println(cIU.current_longitude); }catch(ClassNotFoundException e) { e.printStackTrace(); }catch(IOException e) { e.printStackTrace(); } } }

###UserInformationクラス(クラスオブジェクト)

java

package com.websarva.wings.android.clientver3; import java.io.Serializable; public class UserInformation implements Serializable { public double current_latitude;//現在地 緯度 public double current_longitude;//現在地 経度 public void setcurrent_latitude(double inputcurrent_latitude) { this.current_latitude = inputcurrent_latitude; } public void setcurrent_longitude(double inputcurrent_longitude) { this.current_longitude = inputcurrent_longitude; } }

###Clientプログラム(Android)

Java

package com.websarva.wings.android.clientver3; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import java.io.IOException; import java.io.ObjectOutputStream; import java.net.Socket; import java.net.UnknownHostException; public class MainActivity extends AppCompatActivity { public static Socket socket = null; public static String host = "192.168.11.2"; public static int port = 2001; public static UserInformation cUI = new UserInformation (); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cUI.setcurrent_latitude(35.0); cUI.setcurrent_longitude(139.0); new Thread (new Runnable(){ public void run(){ ObjectOutputStream objectOutputStream = null; try{ socket = new Socket(host,port); objectOutputStream = new ObjectOutputStream(socket.getOutputStream()); objectOutputStream.writeObject(cUI); objectOutputStream.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }).start(); } }

###パーミッション

xml

<manifest > <uses-permission android:name="android.permission.INTERNET"/> <application ~ </application> </manifest>

#試したこと

Client(Android側)のプログラムを少しだけ変更しPC(Server)-PC(Client)で問題なく実行できていることを確認しています。そのときのPC(Client)プログラムが以下になります。
###ClientをPCにした場合

java

import java.io.IOException; import java.io.ObjectOutputStream; import java.net.Socket; import java.net.UnknownHostException; public class Client_ver3 { public static Socket socket = null; public static String host = "192.168.11.2"; public static int port = 2001; public static UserInformation cUI = new UserInformation (); public static void main(String[] args) { cUI.setcurrent_latitude(35.0); cUI.setcurrent_longitude(139.0); ObjectOutputStream objectOutputStream = null; try{ socket = new Socket(host,port); objectOutputStream = new ObjectOutputStream(socket.getOutputStream()); objectOutputStream.writeObject(cUI); objectOutputStream.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }

###実行結果(PCをClientにした際の結果)
aaa
bbb
ccc
eee
35.0
139.0

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jimbe

2021/11/03 15:18

因みにすべてのクラスにおいて package は指定されておらず、UserInformation クラスは同じファイル(一方からもう一方へコピペとかで)なのですね?
gken

2021/11/04 06:25

Clientはpackageしています。 serInformation クラスは同じファイル(ClientからServerへコピペ)です。
gken

2021/11/04 06:35

解決することができました。 ありがとうございました。 ソースコードにpackageを追加したものに修正しました。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。