質問するログイン新規登録

質問編集履歴

3

コードの変更

2019/12/30 04:15

投稿

ph3
ph3

スコア9

title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,10 @@
1
- ---### 前提・実現したいこと
1
+ ### 前提・実現したいこと
2
2
  Eclipseを使い,Javaでソケット通信を用いたプログラムを作りました。
3
3
  そこで,ObjectInputStreamとObjectOutputStreamでやり取りをしようとしたのですが,プログラムがエラーなしで止まってしまいました。
4
4
 
5
5
  コードは上がサーバ側のもので,下がクライアント側です。そして両方ともObjectInputStreamの宣言のところで止まります。ただ,プログラムは終了せずにずっと実行中のままです。
6
+
7
+ なぜ,ObjectInputStreamの宣言のところで止まるのか知りたいです。
6
8
  ### 発生している問題・エラーメッセージ
7
9
 
8
10
  なし
@@ -10,47 +12,84 @@
10
12
  ### 該当のソースコード
11
13
 
12
14
  ```Java
15
+ package test;
16
+
17
+ import java.io.BufferedReader;
18
+ import java.io.IOException;
19
+ import java.io.InputStreamReader;
20
+ import java.io.ObjectInputStream;
21
+ import java.io.ObjectOutputStream;
22
+ import java.io.PrintWriter;
23
+ import java.net.ServerSocket;
24
+ import java.net.Socket;
25
+ import java.util.ArrayList;
26
+ import java.util.List;
27
+
28
+ public class SV {
29
+ int port = 9999;
13
- public SV() {
30
+ public SV() {
14
- System.out.println("hello");
31
+ System.out.println("hello");
15
- try {
32
+ try {
16
- int i = 0;
33
+ int i = 0;
17
- ServerSocket ssock = new ServerSocket(port);
34
+ ServerSocket ssock = new ServerSocket(port);
18
- Socket sock = ssock.accept();
35
+ Socket sock = ssock.accept();
19
- System.out.println("connect");
36
+ System.out.println("connect");
20
- String str;
37
+ String str;
21
- List<String> list1 = new ArrayList<String>();
38
+ List<String> list1 = new ArrayList<String>();
22
- List<String> list2 = new ArrayList<String>();
39
+ List<String> list2 = new ArrayList<String>();
23
- list2.add("123");
40
+ list2.add("123");
24
- list2.add("456");
41
+ list2.add("456");
25
- list2.add("789");
42
+ list2.add("789");
26
- System.out.println(list2);
43
+ System.out.println(list2);
27
-
44
+
28
- ObjectInputStream ois = new ObjectInputStream(sock.getInputStream());
45
+ ObjectInputStream ois = new ObjectInputStream(sock.getInputStream());
29
- //BufferedReader br = new BufferedReader(new InputStreamReader(sock.getInputStream()));
46
+ //BufferedReader br = new BufferedReader(new InputStreamReader(sock.getInputStream()));
30
- System.out.println("ok1");
47
+ System.out.println("ok1");
31
-
48
+
32
- ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream());
49
+ ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream());
33
- //PrintWriter bw = new PrintWriter(sock.getOutputStream());
50
+ //PrintWriter bw = new PrintWriter(sock.getOutputStream(),true);
34
- System.out.println("ok2");
51
+ System.out.println("ok2");
35
-
52
+
36
- while(i<3) {
53
+ while(i<3) {
37
- System.out.println(i);
54
+ System.out.println(i);
38
- list1 = (List<String>) ois.readObject();
55
+ list1 = (List<String>) ois.readObject();
39
- //str = br.readLine();
56
+ //str = br.readLine();
40
- System.out.println(list1);
57
+ System.out.println(list1);
41
- //System.out.println(str);
58
+ //System.out.println(str);
42
- oos.writeObject(list2.get(i));
59
+ oos.writeObject(list2.get(i));
43
- //bw.write(list2.get(i));
60
+ //bw.write(list2.get(i));
44
- i++;
61
+ i++;
62
+ }
63
+
64
+ ssock.close();
65
+ } catch (IOException | ClassNotFoundException e) {
66
+ e.printStackTrace();
45
67
  }
46
-
47
- ssock.close();
48
- } catch (IOException | ClassNotFoundException e) {
49
- e.printStackTrace();
50
68
  }
69
+
70
+ public static void main(String args[]) {
71
+ System.out.println("server");
72
+ new SV();
73
+ }
51
74
  }
75
+
76
+ ```
77
+ ```Java
78
+ package test;
79
+
80
+ import java.io.BufferedReader;
81
+ import java.io.IOException;
82
+ import java.io.InputStreamReader;
83
+ import java.io.ObjectInputStream;
52
- ---------------------------------------------------------------------------------
84
+ import java.io.ObjectOutputStream;
85
+ import java.io.PrintWriter;
86
+ import java.net.Socket;
87
+ import java.util.ArrayList;
88
+ import java.util.List;
89
+
90
+ public class CL {
91
+ int port = 9999;
53
- public CL() {
92
+ public CL() {
54
93
  System.out.println("hello");
55
94
  try {
56
95
  int i = 0;
@@ -68,26 +107,35 @@
68
107
  System.out.println("ok1");
69
108
 
70
109
  ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream());
71
- //PrintWriter bw = new PrintWriter(sock.getOutputStream());
110
+ //PrintWriter bw = new PrintWriter(sock.getOutputStream(),true);
72
111
  System.out.println("ok2");
73
112
 
74
113
  while(i<3) {
114
+ Thread.sleep(1000);
75
115
  System.out.println(i);
76
116
  oos.writeObject(list2.get(i));
77
- //bw.write(list2.get(i));
117
+ //bw.println(list2.get(i));
78
118
  list1 = (List<String>) ois.readObject();
79
119
  //str = br.readLine();
80
120
  //System.out.println(str);
81
121
  System.out.println(list1);
82
122
  i++;
83
123
  }
84
- } catch (IOException | ClassNotFoundException e) {
124
+ } catch (IOException | InterruptedException | ClassNotFoundException e) {
85
125
  e.printStackTrace();
86
126
  }
87
127
  }
128
+
129
+ public static void main(String args[]) {
130
+ System.out.println("client");
131
+ new CL();
132
+ }
133
+ }
134
+
88
135
  ```
89
136
  ### 試したこと
90
137
  ObjectInputStreamとObjectOutputStreamを消して,コメントアウトしてあるBufferedReaderとPrintWriterで同じようなことをしようとした結果,今度はstr = br.readLine()のところで止まってしまいました。
138
+ ※追記:bw.writeをbw.printlnに変更したら正常に動きました。
91
139
 
92
140
 
93
141
  ### 補足情報(FW/ツールのバージョンなど)

2

クライアント側のコードを追記

2019/12/30 04:15

投稿

ph3
ph3

スコア9

title CHANGED
File without changes
body CHANGED
@@ -2,7 +2,7 @@
2
2
  Eclipseを使い,Javaでソケット通信を用いたプログラムを作りました。
3
3
  そこで,ObjectInputStreamとObjectOutputStreamでやり取りをしようとしたのですが,プログラムがエラーなしで止まってしまいました。
4
4
 
5
- コードはサーバ側のもので,クライアント側もほぼ同じコードです。そして両方ともObjectInputStreamの宣言のところで止まります。ただ,プログラムは終了せずにずっと実行中のままです。
5
+ コードは上がサーバ側のもので,下がクライアント側です。そして両方ともObjectInputStreamの宣言のところで止まります。ただ,プログラムは終了せずにずっと実行中のままです。
6
6
  ### 発生している問題・エラーメッセージ
7
7
 
8
8
  なし
@@ -49,6 +49,42 @@
49
49
  e.printStackTrace();
50
50
  }
51
51
  }
52
+ ---------------------------------------------------------------------------------
53
+ public CL() {
54
+ System.out.println("hello");
55
+ try {
56
+ int i = 0;
57
+ Socket sock = new Socket("localhost",port);
58
+ String str;
59
+ List<String> list1 = new ArrayList<String>();
60
+ List<String> list2 = new ArrayList<String>();
61
+ list2.add("ABC");
62
+ list2.add("DEF");
63
+ list2.add("GHI");
64
+ System.out.println(list2);
65
+
66
+ ObjectInputStream ois = new ObjectInputStream(sock.getInputStream());
67
+ //BufferedReader br = new BufferedReader(new InputStreamReader(sock.getInputStream()));
68
+ System.out.println("ok1");
69
+
70
+ ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream());
71
+ //PrintWriter bw = new PrintWriter(sock.getOutputStream());
72
+ System.out.println("ok2");
73
+
74
+ while(i<3) {
75
+ System.out.println(i);
76
+ oos.writeObject(list2.get(i));
77
+ //bw.write(list2.get(i));
78
+ list1 = (List<String>) ois.readObject();
79
+ //str = br.readLine();
80
+ //System.out.println(str);
81
+ System.out.println(list1);
82
+ i++;
83
+ }
84
+ } catch (IOException | ClassNotFoundException e) {
85
+ e.printStackTrace();
86
+ }
87
+ }
52
88
  ```
53
89
  ### 試したこと
54
90
  ObjectInputStreamとObjectOutputStreamを消して,コメントアウトしてあるBufferedReaderとPrintWriterで同じようなことをしようとした結果,今度はstr = br.readLine()のところで止まってしまいました。

1

初心者マーク

2019/12/30 03:01

投稿

ph3
ph3

スコア9

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- ### 前提・実現したいこと
1
+ ---### 前提・実現したいこと
2
2
  Eclipseを使い,Javaでソケット通信を用いたプログラムを作りました。
3
3
  そこで,ObjectInputStreamとObjectOutputStreamでやり取りをしようとしたのですが,プログラムがエラーなしで止まってしまいました。
4
4