このプログラムを使用して他の人とメッセージを送受信できる UDP Java チャット プログラムを作成したいと考えていました。ソケットのプログラミングは自分で(Google検索などで)把握したので、すべての部分が完全には理解できていません。基本的な考え方は、チャットしたいランダムな IP を文字列として読み取り、それを IP に変換し、ポート A からメッセージを送信するためのスレッドとポート B でメッセージを受信するための 2 つのスレッドを開始することです (スレッドは、同時にメッセージを送受信できます)。すべてのスレッドには独自のクラスがあります。ここまでは順調ですね。これで、両方のクラスにメソッド run があり、どちらも大きな try-catch ブロックにあります。2 つの catch ブロックで、最初に "Test123"、次に "Test456" といういくつかのエラー メッセージを追加して、いつ何が起こるかを理解できるようにしました。コードをコンパイルすると、IP を入力できます (テストのために localhost を試しました)。しかし、メッセージを入力すると、「チャット パートナーが送信しました:」というメッセージが表示されるはずですが、代わりに何も表示されません。現在、両方のスレッドが無限ループに入っているため、(Ctrl+C を押して (コマンドで .class を実行して)) プログラムを強制終了すると、プログラムが終了する前に「Test123」というエラー メッセージが表示されます。私の質問は次のとおりです。メッセージが表示されないのはなぜですか。また、プログラムを強制終了すると、プログラムが「Test123」をスローするのはなぜですか? エラーはどこにありますか? 助けてくれてありがとう。コードは次のとおりです。そのため、プログラムを強制終了すると (Ctrl+C を押して (コマンドで .class を実行します))、プログラムが終了する前にエラー メッセージ "Test123" が表示されます。私の質問は次のとおりです。メッセージが表示されないのはなぜですか。また、プログラムを強制終了すると、プログラムが「Test123」をスローするのはなぜですか? エラーはどこにありますか? 助けてくれてありがとう。コードは次のとおりです。そのため、プログラムを強制終了すると (Ctrl+C を押して (コマンドで .class を実行します))、プログラムが終了する前にエラー メッセージ "Test123" が表示されます。私の質問は次のとおりです。メッセージが表示されないのはなぜですか。また、プログラムを強制終了すると、プログラムが「Test123」をスローするのはなぜですか? エラーはどこにありますか? 助けてくれてありがとう。コードは次のとおりです。
import java.net.*;
import java.util.Scanner;
public class chat {
static InetAddress IP;
static int sPort=11111;
static int rPort=11112;
public static void main(String[] args) throws Exception{
System.out.println("Zu welcher IP soll verbunden werden?");//"which IP do you want to connect with?"
Scanner sc = new Scanner(System.in);
String IPraw=sc.next(); //type in the IP address as String
IP=InetAddress.getByName(IPraw); //converting the String into real IP address
Thread sender = new sender();
sender.start(); //start the sending thread
Thread receiver = new receiver();
receiver.start(); //start the receiving thread
}
}
class sender extends Thread{
public void run(){
byte[] sendData = new byte[1024];
Scanner scantext = new Scanner(System.in);
try{
DatagramSocket Socket = new DatagramSocket();
while(true){
String TextSend = scantext.next();
sendData = TextSend.getBytes();
DatagramPacket out = new DatagramPacket(sendData, sendData.length, chat.IP, chat.rPort);
Socket.send(out);
}
}
catch(Exception e){
System.out.println("Test123");
}
}
}
class receiver extends Thread{
public void run(){
byte[] receiveData = new byte[1024];
try{
DatagramSocket socket = new DatagramSocket();
while(true){
DatagramPacket in = new DatagramPacket(receiveData, receiveData.length, chat.IP, chat.sPort);
socket.receive(in);
String message = new String(in.getData());
System.out.println("Chatpartner sagt: " + message);//"partner said <message>"
}
}
catch(Exception e){
System.out.println("Test456");
}
}
}