package network05;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Sever {
public static void main(String[] args) {
ServerSocket ss =null;
Socket s= null;
try {
ss =new ServerSocket(5858);
while(true){
s =ss.accept();//来一个就创建一个Socket对象
new Sever_Socket(s).run();;
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(ss!=null)ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class Sever_Socket{
private Socket s =null;
BufferedReader br;
PrintWriter pw;
String name;
public Sever_Socket(Socket s) throws IOException {
this.s =s;
br=new BufferedReader(new InputStreamReader(s.getInputStream()));
pw=new PrintWriter(s.getOutputStream(),true);
name=s.getInetAddress().getHostAddress()+":"+s.getPort();
System.out.println(name+"已经连接上");
}
public void receive() throws IOException{
String str = null;
while((str=br.readLine())!=null){
if(str.equalsIgnoreCase("quite")){
//关闭,进行资源的释放
pw.println("close");
break;
}
System.out.println(name+"--"+str);
pw.println("Receive"+str);
}
System.out.println(name+"已经离开");
}
public void run(){
try {
while(true){
receive();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(s!=null)s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
java网络编程关于循环结构的困惑
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 砸死接触 2017-08-11 03:35关注
你贴的代码和你的图片内容不太一致, 代码中的Sever_Socket并不是线程,这样是不行的。
图片中的while(true)是为了保持长连接,可以持续接收信息,这样你的客户端发了一个信息之后,这个链接不会断,可以继续发信息。
如果没有while(true),发一次就要连接一次。
你说的确实对,‘有没有都可以运行’,但是你用socket的目的不是一次性回话,是要保持连接!!!!解决 无用评论 打赏 举报
悬赏问题
- ¥17 pro*C预编译“闪回查询”报错SCN不能识别
- ¥15 微信会员卡接入微信支付商户号收款
- ¥15 如何获取烟草零售终端数据
- ¥15 数学建模招标中位数问题
- ¥15 phython路径名过长报错 不知道什么问题
- ¥15 深度学习中模型转换该怎么实现
- ¥15 HLs设计手写数字识别程序编译通不过
- ¥15 Stata外部命令安装问题求帮助!
- ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
- ¥15 TYPCE母转母,插入认方向