現在eclipseのJavaを使ってクライアント/サーバプログラムの修正・追加プログラムとしてクライアント側から国名を入力するとサーバ側からその国の時刻が出力されるようにしたいのですがエラーが起こります。自分では、解決できないので協力お願いします。ちなみにTCPを使ってます。
lang
1TCPClient.java; 2 3import java.io.DataInputStream; 4import java.io.DataOutputStream; 5import java.io.EOFException; 6import java.io.IOException; 7import java.net.Socket; 8import java.net.UnknownHostException; 9 10public class TCPClient { 11 public static void main (String args[]) { 12 // arguments supply message and hostname 13 Socket s = null; 14 try{ 15 int serverPort = 7896; 16 s = new Socket(args[1], serverPort); 17 DataInputStream in = new DataInputStream( s.getInputStream()); 18 DataOutputStream out =new DataOutputStream( s.getOutputStream()); 19 out.writeUTF(args[0]); // UTF is a string encoding see Sn. 4.4 20 String time = in.readUTF(); // read a line of data from the stream 21 System.out.println("Received: "+ time) ; 22 }catch (UnknownHostException e){System.out.println("Socket:"+e.getMessage()); 23 }catch (EOFException e){System.out.println("EOF:"+e.getMessage()); 24 }catch (IOException e){System.out.println("readline:"+e.getMessage()); 25 }finally {if(s!=null) try {s.close();}catch (IOException e){System.out.println("close:"+e.getMessage());}} 26 } 27} 28 29コード
lang
1TCPserver.java; 2 3import java.io.DataInputStream; 4import java.io.DataOutputStream; 5import java.io.EOFException; 6import java.io.IOException; 7import java.net.ServerSocket; 8import java.net.Socket; 9import java.util.Calendar; 10import java.util.TimeZone; 11 12public class TCPServer { 13 public static void main (String args[]) { 14 try{ 15 int serverPort = 7896; // the server port 16 ServerSocket listenSocket = new ServerSocket(serverPort); 17 while(true) { 18 Socket clientSocket = listenSocket.accept(); 19 Connection c = new Connection(clientSocket); 20 } 21 } catch(IOException e) {System.out.println("Listen socket:"+e.getMessage());} 22 } 23} 24class Connection extends Thread { 25 DataInputStream in; 26 DataOutputStream out; 27 Socket clientSocket; 28 public Connection (Socket aClientSocket) { 29 try { 30 clientSocket = aClientSocket; 31 in = new DataInputStream( clientSocket.getInputStream()); 32 out =new DataOutputStream( clientSocket.getOutputStream()); 33 this.start(); 34 } catch(IOException e) {System.out.println("Connection:"+e.getMessage());} 35 } 36 public void run(){ 37 try { // an echo server 38 Calendar cal = Calendar.getInstance(); // カレンダー型で時刻を取得 39 String data = in.readUTF(); // read a line of data from the stream 40 41 String time; // int 型から String 型へ変換 42 int h = cal.get(Calendar.HOUR_OF_DAY); // 24時間単位で時間を取得 43 int m = cal.get(Calendar.MINUTE); // 分を取得 44 int s = cal.get(Calendar.SECOND); // 秒を取得 45 String hour = String.valueOf(h); 46 String minute = String.valueOf(m); 47 String second = String.valueOf(s); 48 49 // 第1引数に入れた国のタイムゾーンの情報を取得 50 TimeZone tz = TimeZone.getTimeZone(data); 51 52 cal = Calendar.getInstance(tz); 53 h = cal.get(Calendar.HOUR_OF_DAY); 54 m = cal.get(Calendar.MINUTE); 55 s = cal.get(Calendar.SECOND); 56 hour = String.valueOf(h); 57 minute = String.valueOf(m); 58 second = String.valueOf(s); 59 // 取得した時刻を time に入れる 60 time = tz.getDisplayName() + "の時刻は" + hour + "時" + minute + "分" + second + "秒"; 61 62 out.writeUTF(time); 63 64 }catch (EOFException e){System.out.println("EOF:"+e.getMessage()); 65 } catch(IOException e) {System.out.println("readline:"+e.getMessage()); 66 } finally{ try {clientSocket.close();}catch (IOException e){/*close failed*/}} 67 68 69 } 70} 71 72コード
このプログラムでTCPCient.javaを実行すると、
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at TCPClient.java.TCPClient.main(TCPClient.java:16)
このような文が出るのですが、どう修正すればいいのか分かりません。
ちなみに、TCPServer.javaを実行すると、
Listen socket:Address already in use: JVM_Bind
となります。
完全に手詰まり状態なのでどうかお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/05/18 07:20
2015/05/18 07:25
2015/05/18 07:34
2015/05/18 08:01