java的socket多线程通讯问题

发布于 2021-11-03 19:02:48 字数 1849 浏览 924 评论 1

@andy liu老师,谢谢您,我还想麻烦您一下,就是帮我解释一下下面这段代码

public void start() {

try {

ss=new ServerSocket(8888);//锁定一个TCP端口

} catch (IOException e) {

// TODO Auto-generated catch block

ta1.append("端口正在使用……"+"n");

System.exit(0);//退出程序

}

boo=true;

ta1.append("服务器启动了"+"n");

//ta2.requestFocusInWindow();

try {

while(boo){//不断循环客户端的请求连接

Socket s=ss.accept();

Client c=new Client(s);

new Thread(c).start();

clients.add(c);

                                    }

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

try {

if(ss!=null){

ss.close();

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

我不懂为什么还要定义Client c=new Client(s);还有这个Client跟下面定义的类有啥关系吗?

private class Client implements Runnable  {

//定义成员变量

private Socket s;

private boolean bconnect;

public Client(Socket s){

//初始化输入输出流

try {

this.s=s;

dis=new DataInputStream(s.getInputStream());

dos=new DataOutputStream(s.getOutputStream());

bconnect=true;

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

就是在start()方法里已经定义有了Socket s了,为什么Client这个类里面还定义有另外一个Socket s,而且也没有赋值,我觉得这个类中的构造方法是实例化两个输入输出流对吗?还望刘老师不吝赐教!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青萝楚歌 2021-11-04 05:30:05

每个accept后的socket都不一样的,得放在client的环境里面,否则访问的都是同一个socket对象。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文