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();
}
}
}
}
你贴的代码和你的图片内容不太一致, 代码中的Sever_Socket并不是线程,这样是不行的。
图片中的while(true)是为了保持长连接,可以持续接收信息,这样你的客户端发了一个信息之后,这个链接不会断,可以继续发信息。
如果没有while(true),发一次就要连接一次。
你说的确实对,‘有没有都可以运行’,但是你用socket的目的不是一次性回话,是要保持连接!!!!