尝试使用Java编写聊天代码,但是我在从Scanner到DataOutputStream输入字符串时遇到了问题。 客户部分:
public class Greetings extends Packet{
private String nickname;
public Greetings(){}
public Greetings(String nickname)
{
this.nickname = nickname;
}
@Override
public int getId() {
System.out.print(nickname);
return 120;
}
@Override
public void send(DataOutputStream dos) {
System.out.print("GOT IT");
try {
dos.writeUTF(nickname);
System.out.println("Nickname "+nickname);
dos.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void receive(DataInputStream dis) {
}
}
如果我在没有扫描仪的情况下发送信息(如硬编码名称和ID),则可以正常工作。
问候包代码:
//For each new client new handler
public class ClientHandler extends Thread {
private Socket socket;
public ClientHandler(Socket socket)
{
this.socket = socket;
start();
}
public void run()
{
while (true)
{ try {
if (!isInterrupted())
{DataInputStream dis = new
DataInputStream(socket.getInputStream());
if (dis.available() > 0)
{
Packet p = PacketManager.getPacketById(dis.readInt());
p.receive(dis);
p.handle();
}} } catch (SocketException se)
{} catch (IOException e)
{} finally {
end();
}
}
}
private void end()
{
interrupt();
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
看起来像我看不见的东西是愚蠢的,这让我发疯了。
服务器部分:
{{1}}
看起来像smt简单,我只是看不到。就像,扫描仪的字符串和通常的字符串之间有一些不同。但他们的十六进制代码是相同的......
将INT和STRING写入dataOutuputStream时出现问题。