📄 socketserver.java
字号:
//服务器程序的开发原理:
//客户端向服务器提交申请,服务器程序生成了一个拥有对应客户端的Socket线程,该线程便成为了服务代理,每个线程代理一个
//客户端,服务器继续侦听连接请求。如果某个客户端出现了问题,并不会影响其它客户端的运行,因为各个客户端是相互独立的。
//主程序监听一端口,等待客户接入;同时构造一个线程类,准备接管会话。
//当一个Socket会话产生后,将这个会话交给线程处理,然后主程序继续监听。
import java.net.*;
import java.io.*;
public class SocketServer
{ public static void main(String args[])
{ ServerSocket ss=null;
int port=1000;
boolean listening=true;
try
{ ss=new ServerSocket(port);
}
catch(IOException e)
{ System.err.println("Cannot Listen.");
System.exit(-1);
}
port=ss.getLocalPort();
System.out.println("Listening on Port:"+port);
while(listening)
{ Socket cs=null;
try
{ cs=ss.accept();
//Accept()方法直到接收到用户的连接请求,才继续执行中断的执行程序
}
catch(IOException e)
{ System.err.println("Accept failed:"+port);
continue;
}
new SocketServerThread(cs).start();
}
try
{ ss.close();
}
catch(IOException e)
{ System.err.println("Canot closed server socket.");
}
}
}
class SocketServerThread extends Thread
{ Socket s=null;
SocketServerThread(Socket socket)
{ super("SocketServerThread");
s=socket;
}
public void run()
{ try
{
DataInputStream sin=new DataInputStream(s.getInputStream());
PrintStream sout=new PrintStream(s.getOutputStream());
/*也可以采用如下方式:
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter out= new PrintWriter(s.getOutputStream(),true);
*/
String acceptText;
while(true)
{ if((acceptText=sin.readLine())!=null)
{ sout.println("Server Message:"+acceptText);
}
else
break;
}
sout.close();
sin.close();
s.close();
}catch(IOException e)
{ e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -