ソケットとスレッドを使ったチャットプログラムを作ろうとしています。
とりあえずUDP通信を行おうとしているのですが、自分のパソコンでは実行できるのですが、他の別パソコンとは実行できず通信ができません。
Java
1package semi; 2/** 3 * udpechoサーバ 4 * udpechoServer.java 5 * 6 * 用法例 7 * >java udpechoServer 8 */ 9 10import java.net.*; 11import java.io.*; 12 13public class udpechoServer { 14 static final int echo_PORT = 10007; 15 static final int BUFSIZE = 1024; //受信バッファサイズ 16 17 public static void main(String[] args) throws IOException{ 18 int port = echo_PORT; //ポート番号 19 int cliport; //クライアントポート番号 20 int len; //データ長 21 int i; //キーインバッファクリアインデックス 22 DatagramSocket sock = null; //データグラムソケット宣言,初期化 23 byte[] buf = new byte[BUFSIZE]; //送受信バッファ 24 byte[] wbuf = new byte[BUFSIZE]; //ワークバッファ 25 String recvdata; //受信データ 26 try{ 27 sock = new DatagramSocket(port); 28 DatagramPacket recvpacket = new DatagramPacket(buf,BUFSIZE); 29 DatagramPacket sendpacket = new DatagramPacket(buf,BUFSIZE); 30 System.out.println("Connected to echo server"); 31 while(true){ 32 sock.receive(recvpacket); //データ受信 33 recvdata = new String(recvpacket.getData(),0,recvpacket.getLength()); 34 recvdata = recvdata.trim(); //トリミング(CRLF) 35 wbuf = recvdata.getBytes(); //文字列→バイト配列変換 36 i = 0; 37 len = wbuf.length; 38 buf = new byte[BUFSIZE]; 39 while(wbuf[i] != 0x0d){ //途中のCR検出 40 buf[i] = wbuf[i]; //データコピー 41 i++; 42 if(i >= len){ 43 break; 44 } 45 } 46 recvdata = new String(buf,0,i); //バイト配列→文字列変換 47 System.out.println(recvdata); //画面出力 48 InetAddress ipadr = recvpacket.getAddress(); 49 cliport = recvpacket.getPort(); 50 buf = recvdata.getBytes(); //文字列→バイト配列変換 51 len = buf.length; 52 sendpacket = new DatagramPacket(buf,len,ipadr,cliport); 53 sock.send(sendpacket); //データ送信 54 recvpacket.setLength(BUFSIZE); //データグラムパケット長リセット 55 } 56 }catch(SocketException e){ 57 e.printStackTrace(); 58 } 59 } 60} 61
Java
1package semi; 2 3/** 4 * udpechoクライアント 5 * udpechoClient.java 6 * 7 * 用法例 8 * >java udpechoClient 192.168.1.1 9 */ 10 11import java.net.*; 12import java.io.*; 13 14public class udpechoClient { 15 static final int echo_PORT = 10007; 16 static final int BUFSIZE = 1024; //受信バッファサイズ 17 18 public static void main(String[] args) throws IOException{ 19 int port = echo_PORT; //ポート番号 20 byte[] buf = new byte[BUFSIZE]; //送受信バッファ 21 int k; //バイト数 22 DatagramSocket sock = null; //データグラムソケット宣言,初期化 23 if(args.length != 1){ 24 throw new IllegalArgumentException("usage: >java udpechoClient <IP_Address>"); 25 } 26 while(true){ 27 try{ 28 InetAddress adr = InetAddress.getByName(args[0]); //サーバIPアドレス 29 System.out.print("cli>"); //プロンプト出力 30 k = System.in.read(buf); //キー入力 31 if(k == -1){ 32 break; 33 } 34 sock = new DatagramSocket(); 35 DatagramPacket packet = new DatagramPacket(buf,buf.length,adr,port); 36 sock.send(packet); //入力データ送信 37 buf = new byte[BUFSIZE]; 38 packet = new DatagramPacket(buf,buf.length); 39 sock.receive(packet); //エコーデータ受信 40 String data = new String(packet.getData(),0,packet.getLength()); 41 System.out.println(data); //画面出力 42 }catch(SocketException e){ 43 e.printStackTrace(); 44 } 45 } 46 sock.close(); //ソケットクローズ 47 } 48} 49
どうすれば他のパソコンとUDPソケット通信ができるようになるのか教えてください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。