Serversocket中的acce()方法以及多线程

scl1991 2015-06-15 07:44:42
package hhe;

import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class serversocket {

public static void main(String[] args) throws IOException {

ServerSocket ss=new ServerSocket(10003);

while(true)
{
Socket soc=ss.accept(); //此处不是太理解,当监听到一个socket流连接后,开辟一个单独的线程执行,然后主线'' //程执行while()循环,再次执行到此句的时候,上面那个线程还没有释放资源,ServerSocket怎么可以再次监听呢?

new Thread(new uploadthread(soc)).start();

}
}

}
...全文
124 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
finemi 2015-06-21
  • 打赏
  • 举报
回复
简单的理解:scoket释不释放的和ServerSocket已经没关系了,他取得了一个Scoket请求放行后马上就可以再次去等待下一个了
Looper景 2015-06-21
  • 打赏
  • 举报
回复
首先服务器端的ServerSocket不需要释放资源,因为服务器不能断,要一直监听客户端来的请求并给予响应,其次客户端的Socket在用完之后要关闭,节约服务器端的内存。就像你写的一样,你可以把客户端的Socket对象以构造函数的参数传递到Runable的实现类中,这样每个线程用完之后方便关闭。。。
三仙半 2015-06-15
  • 打赏
  • 举报
回复
我个人理解,ServerSocket相当于一个机关传达室老头,Socket相当于访客,来这个机关办事,不管访客多大官,访客要找得人多有权,老头可以不放你进来,正所谓阎王好见小鬼难搪啊,老头一旦accept()了,他就告诉访客要找的人在哪里,剩下的就是访客和要找的人办业务了,他俩不可能把机关大门都占用了,对吧,所以,又来一个访客,老头再决定让不让这个新访客进来。 当然,这个比喻也有缺陷,那就是,在Socket通信中,不存在两个访客找同一个人办事的可能。不管有没有缺陷,辅助理解吧,嘿嘿

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧