前提・実現したいこと
pcをサーバーとし、androidをクライアントとしたソケット通信を行いたい。
発生している問題・エラーメッセージ
pcでサーバーのプログラムを起動し待ち状態にした後に、クライアントとしたandroid studioを実行しているが、サーバー側で受信出来ないでいます。
内容としてはandroid studioでボタンを押すことで文字列を送った際に、サーバー側で偶数か奇数か判別するものになっており、今はクライアント側で「2」を送信しています。eclipseもandroid studioもエラーははかず実行できている状態です。
android studioではインターネット接続を行うパーミッションは追加してあります。
エラーが出ないためなぜサーバー側で受信できていないのか、もしくはクライアント側が送信できていないのか教えて頂けないでしょうか。よろしくお願い致します。
ソースコードは以下になります。
該当のソースコード
java(android
1//クライアント側 2import android.app.Activity; 3import android.util.Log; 4 5import java.io.BufferedReader; 6import java.io.IOException; 7import java.io.InputStreamReader; 8import java.io.PrintWriter; 9import java.net.Socket; 10 11class SocketConnection extends Activity { 12 13 void Connect(){ 14 15 Socket cSocket = null; 16 PrintWriter writer = null; 17 BufferedReader reader = null; 18 19 try{ 20 cSocket = new Socket(IPアドレス, ポート番号); 21 22 //送信 23 writer = new PrintWriter 24 (cSocket.getOutputStream(), true); 25 26 //受診 27 reader = new BufferedReader 28 (new InputStreamReader 29 (cSocket.getInputStream())); 30 31 while (true) { 32 writer.println("2"); 33 34 Log.d("test","サーバー側回答:" + reader.readLine()); 35 } 36 }catch(Exception e){ 37 e.printStackTrace(); 38 }finally{ 39 try { 40 if (reader != null) { 41 reader.close(); 42 } 43 if (writer != null) { 44 writer.close(); 45 } 46 if (cSocket != null) { 47 cSocket.close(); 48 } 49 } catch (IOException e) { 50 e.printStackTrace(); 51 } 52 System.out.println("終了"); 53 } 54 } 55} 56 57import android.os.Bundle; 58import android.support.v7.app.AppCompatActivity; 59import android.util.Log; 60import android.view.View; 61import android.widget.Button; 62 63public class MainActivity extends AppCompatActivity { 64 65 @Override 66 protected void onCreate(Bundle savedInstanceState) { 67 super.onCreate(savedInstanceState); 68 setContentView(R.layout.activity_main); 69 70 Button b1=findViewById(R.id.button); 71 b1.setOnClickListener(new View.OnClickListener() { 72 public void onClick(View view) { 73 SocketConnection s = new SocketConnection(); 74 s.Connect(); 75 } 76 }); 77 } 78}
java(eclipse)
1//サーバー側 2import java.io.BufferedReader; 3import java.io.IOException; 4import java.io.InputStreamReader; 5import java.io.PrintWriter; 6import java.net.InetSocketAddress; 7import java.net.ServerSocket; 8import java.net.Socket; 9 10class Socket_Connection { 11 12 13 void connect() throws Exception { 14 15 ServerSocket sSocket = null; 16 Socket socket = null; 17 BufferedReader reader = null; 18 PrintWriter writer = null; 19 20 try{ 21 //ソケットを作成 22 sSocket = new ServerSocket(); 23 sSocket.bind(new InetSocketAddress 24 (IPアドレス,ポート番号)); 25 26 System.out.println("入力待ち"); 27 28 socket = sSocket.accept(); 29 30 //受信 31 reader = new BufferedReader( 32 new InputStreamReader 33 (socket.getInputStream())); 34 35 //送信 36 writer = new PrintWriter( 37 socket.getOutputStream(), true); 38 39 String line = null; 40 int num; 41 while (true) { 42 43 line = reader.readLine(); 44 45 try{ 46 num = Integer.parseInt(line); 47 48 if(num%2==0){ 49 writer.println("OK"); 50 }else{ 51 writer.println("NG"); 52 } 53 }catch(NumberFormatException e){ 54 writer.println("偶数を入力して下さい"); 55 } 56 System.out.println("文字列=" + line); 57 } 58 }catch(Exception e){ 59 e.printStackTrace(); 60 }finally{ 61 try{ 62 if (reader!=null){ 63 reader.close(); 64 } 65 if (writer!=null){ 66 writer.close(); 67 } 68 if (socket!=null){ 69 socket.close(); 70 } 71 if (sSocket!=null){ 72 sSocket.close(); 73 } 74 System.out.println("サーバー側終了です"); 75 } catch (IOException e) { 76 e.printStackTrace(); 77 } 78 } 79 } 80} 81 82public class Main { 83 public static void main(String[] args) throws Exception{ 84 Socket_Connection sc =new Socket_Connection(); 85 sc.connect(); 86 } 87}