gpt4 book ai didi

java - 错误在哪里//为什么不起作用? (Java聊天程序)

转载 作者:行者123 更新时间:2023-12-01 14:15:49 24 4
gpt4 key购买 nike

我想编写一个 UDP java 聊天程序,我可以使用该程序向另一个人发送消息并从另一个人接收消息。我自己想出了套接字编程(谷歌搜索等),所以我不完全理解每一个部分。基本思想是读取一个你想要聊天的随机 IP 作为字符串,将其转换为 IP 并启动两个线程,一个用于从端口 A 发送消息,一个用于在端口 B 接收消息(线程用于两者都能够同时发送和接收消息)。每个线程都有它自己的类。到目前为止,一切都很好。现在,两个类都有 run 方法,它们都在一个大的 try-catch block 中。在两个 catch block 中,我添加了几条错误消息,首先是“Test123”,然后是“Test456”,这样我就可以理解何时会发生什么。编译代码时,我可以输入IP(我尝试使用localhost进行测试)。但是,当我输入消息时,我应该收到消息“聊天伙伴发送:”,但我什么也没收到。现在两个线程都处于无限循环中,因此当我强制程序终止(通过按 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");
}
}
}

最佳答案

发送者线程正在等待您在 System.in 上插入一些数据(只需键入一些内容)。它在这里被阻止,在这一行: String TextSend = scantext.next();

关于java - 错误在哪里//为什么不起作用? (Java聊天程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18114805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com