我想编写一个 UDP java 聊天程序,我可以在其中使用该程序与另一个人发送和接收消息。我自己弄清楚了套接字编程(谷歌搜索等),所以我并不完全理解每一个部分。基本思想是读取一个你想与之聊天的随机 IP 作为字符串,将其转换为 IP 并启动两个线程,一个用于从端口 A 发送消息,一个用于在端口 B 接收消息(线程用于都能够同时发送和接收消息)。每个线程都有自己的类。到目前为止,一切都很好。现在这两个类都有 run 方法,它们都在一个大的 try-catch 块中。在两个 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");
}
}
}