双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

这个线程问题 怎么也想不明白 求助!

windyfzz windyfzz 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
做了一个登陆系统。 服务器已做好

如图是一个登陆界面

无标题.png (27.88 KB)



其中我想实现这样一个功能: 当你输入你的昵称后 点击登陆 开始连接服务器。。。 但是如果有别人用相同的昵称登陆服务器,服务器会向客户端发送一个消息"ReName"(重名)。客户端检测到这个信息后 系统会提醒 “你的昵称已被人使用!”要求重新输入新的昵称 如果检测到昵称没有被使用 则进入 登陆成功的界面。

部分源码如下:
//实时接收服务器传来的消息
package CSsystem;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class serverSocket extends Thread
{
//OutputStream os=null;

//PrintStream ps=null;

InputStream is=null;

BufferedReader br=null;

String serverInformation=null;

boolean isHaveReName=false;

Socket socket=null;

public serverSocket(Socket socket)
{
try
{
this.socket=socket;

is=socket.getInputStream();
br=new BufferedReader(new InputStreamReader(socket.getInputStream()));

// os=socket.getOutputStream();
// ps=new PrintStream(os);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}


public void run()
{
while(true)
{
try
{
serverInformation=getInformation();
if(serverInformation.equals("ReName"))
{
//System.out.println("收到重名信息!");
isHaveReName=true;

}
}
catch(Exception ex)
{
ex.printStackTrace();
}


}
}


private String getInformation()
{

String str=null;
try
{
str=br.readLine();

}
catch(Exception ex)
{
ex.printStackTrace();
}
return str;
}


}

点击登陆按钮时事件
/**
登陆
**/
private void landingToServer()
{
if(nameField.getText().trim().length()==0)
{
JOptionPane.showMessageDialog(null, "请输入你的昵称^_^!", "",
JOptionPane.WARNING_MESSAGE);
return;
}

try
{
IP=serverIPAddrField.getText().trim();//这是要输入的服务器端 的IP地址

sportNumber=Integer.parseInt(sportNumberField.getText().trim());//这是连接的端口号

socket=new Socket();
socket.connect(new InetSocketAddress(InetAddress.getByName(IP),sportNumber), 15*1000);

if(socket.isConnected())//如果连接服务器成功
{

ss=new serverSocket(socket);//ss为serverSocket类的全局变量(已在前面定义过)
ss.start();

if(ss.isHaveReName==true)//通过检测isHaveReName值判断是否重名
{

JOptionPane.showMessageDialog(null, "你的昵称已被人使用!", "",
JOptionPane.WARNING_MESSAGE);
}
else//否则进入登陆成功的界面
{
createChatPanel();
resetPanel(chatPanel);
}

}


}

catch()
{
。。。。。。
}


经过测试 当如果重名的时候 服务器能向客户端发送"ReName"消息 客户端也能接收到该消息。

我实现的方法是 在serverSocket类中定义一个boolean isHaveReName=false变量 当接收到"ReName"消息是说明有重名,此时isHaveReName=true;

在登陆事件函数中通过检测 isHaveReName的值判断是否重名。 但是测试的时候isHaveReName的值总是false; 但是当接收到"ReName"消息时,在serverSocket类中打印该值的时候该值为true,正常。 为什么像我那样在外面定义一个serverSocket类的变量 然后打印该值时即使接收到了"ReName"消息 该值还是总是false呢? 很困惑 可能是我哪里犯糊涂了没想明白。。。
求解答
...全文

相关推荐

写SEO软文之前大家应该想明白几个问题共17页.ppt

写SEO软文之前大家应该想明白几个问题共17页.ppt写SEO软文之前大家应该想明白几个问题共17页.ppt写SEO软文之前大家应该想明白几个问题共17页.ppt写SEO软文之前大家应该想明白几个问题共17页.ppt写SEO软文之前大家应该想明白几个问题共17页.ppt写SEO软文之前大家应该想明白几个问题共17页.ppt写SEO软文之前大家应该想明白几个问题共17页.ppt写SEO软文之前大家应该想明白几个问题共17页.ppt写SEO软文之前大家应该想明白几个问题共17页.ppt

「已注销」

写SEO软文之前大家应该想明白几个问题共17页.pdf

写SEO软文之前大家应该想明白几个问题共17页.pdf写SEO软文之前大家应该想明白几个问题共17页.pdf写SEO软文之前大家应该想明白几个问题共17页.pdf写SEO软文之前大家应该想明白几个问题共17页.pdf写SEO软文之前大家应该想明白几个问题共17页.pdf写SEO软文之前大家应该想明白几个问题共17页.pdf写SEO软文之前大家应该想明白几个问题共17页.pdf写SEO软文之前大家应该想明白几个问题共17页.pdf写SEO软文之前大家应该想明白几个问题共17页.pdf

苦茶子12138

多想让你明白我

多想让你明白我

超级源码阿

线程的理解,看完就明白了

大家看看线程来吧,不懂的看完就懂了 不用求人

凤凰村里的人

解决三门问题python代码

比较好的三门问题的演示!如果您想不明白三门问题可以参考此程序。

ColbyLi
评论 14
收藏 已收藏
分享
返回顶部
windyfzz
Java SE 62,621 成员 307,251 内容