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
1package com.websarva.wings.android.clientver3; 2 3import java.io.IOException; 4import java.io.ObjectInputStream; 5import java.net.ServerSocket; 6import java.net.Socket; 7 8public class Server_ver3 { 9 10 public static ServerSocket serverSocket = null; 11 public static Socket socket =null; 12 13 public static void main(String[] args) { 14 15 ObjectInputStream objectInputStream = null; 16 17 try { 18 System.out.println("aaa");//デバッグのため 19 serverSocket = new ServerSocket(2001); 20 socket = serverSocket.accept(); 21 System.out.println("bbb");//デバッグのため 22 23 objectInputStream = new ObjectInputStream(socket.getInputStream()); 24 System.out.println("ccc");//デバッグのため 25 26 UserInformation cIU =(UserInformation)objectInputStream.readObject();//24行目 27 System.out.println("eee");//デバッグのため 28 29 objectInputStream.close(); 30 serverSocket.close(); 31 32 System.out.println(cIU.current_latitude); 33 System.out.println(cIU.current_longitude); 34 35 }catch(ClassNotFoundException e) { 36 e.printStackTrace(); 37 }catch(IOException e) { 38 e.printStackTrace(); 39 } 40 } 41 42} 43
###UserInformationクラス(クラスオブジェクト)
java
1package com.websarva.wings.android.clientver3; 2 3import java.io.Serializable; 4 5public class UserInformation implements Serializable { 6 7 public double current_latitude;//現在地 緯度 8 public double current_longitude;//現在地 経度 9 10 11 public void setcurrent_latitude(double inputcurrent_latitude) { 12 this.current_latitude = inputcurrent_latitude; 13 } 14 15 public void setcurrent_longitude(double inputcurrent_longitude) { 16 this.current_longitude = inputcurrent_longitude; 17 } 18}
###Clientプログラム(Android)
Java
1package com.websarva.wings.android.clientver3; 2 3import androidx.appcompat.app.AppCompatActivity; 4 5import android.os.Bundle; 6 7import java.io.IOException; 8import java.io.ObjectOutputStream; 9import java.net.Socket; 10import java.net.UnknownHostException; 11 12public class MainActivity extends AppCompatActivity { 13 14 public static Socket socket = null; 15 public static String host = "192.168.11.2"; 16 public static int port = 2001; 17 18 public static UserInformation cUI = new UserInformation (); 19 20 @Override 21 protected void onCreate(Bundle savedInstanceState) { 22 super.onCreate(savedInstanceState); 23 setContentView(R.layout.activity_main); 24 25 cUI.setcurrent_latitude(35.0); 26 cUI.setcurrent_longitude(139.0); 27 28 29 new Thread (new Runnable(){ 30 public void run(){ 31 32 ObjectOutputStream objectOutputStream = null; 33 34 try{ 35 socket = new Socket(host,port); 36 objectOutputStream = new ObjectOutputStream(socket.getOutputStream()); 37 38 objectOutputStream.writeObject(cUI); 39 40 objectOutputStream.close(); 41 socket.close(); 42 43 } catch (UnknownHostException e) { 44 e.printStackTrace(); 45 } catch (IOException e) { 46 e.printStackTrace(); 47 } 48 49 } 50 }).start(); 51 } 52}
###パーミッション
xml
1<manifest > 2 <uses-permission android:name="android.permission.INTERNET"/> 3 <application ~ 4 </application> 5</manifest>
#試したこと
Client(Android側)のプログラムを少しだけ変更しPC(Server)-PC(Client)で問題なく実行できていることを確認しています。そのときのPC(Client)プログラムが以下になります。
###ClientをPCにした場合
java
1import java.io.IOException; 2import java.io.ObjectOutputStream; 3import java.net.Socket; 4import java.net.UnknownHostException; 5 6public class Client_ver3 { 7 public static Socket socket = null; 8 public static String host = "192.168.11.2"; 9 public static int port = 2001; 10 11 public static UserInformation cUI = new UserInformation (); 12 13 public static void main(String[] args) { 14 15 cUI.setcurrent_latitude(35.0); 16 cUI.setcurrent_longitude(139.0); 17 18 19 ObjectOutputStream objectOutputStream = null; 20 21 try{ 22 socket = new Socket(host,port); 23 objectOutputStream = new ObjectOutputStream(socket.getOutputStream()); 24 25 objectOutputStream.writeObject(cUI); 26 27 objectOutputStream.close(); 28 socket.close(); 29 30 } catch (UnknownHostException e) { 31 e.printStackTrace(); 32 } catch (IOException e) { 33 e.printStackTrace(); 34 } 35 } 36
###実行結果(PCをClientにした際の結果)
aaa
bbb
ccc
eee
35.0
139.0
回答2件
あなたの回答
tips
プレビュー