62,614
社区成员
发帖
与我相关
我的任务
分享
/**
*
*/
package clientservermodel2;
import java.io.*;
import java.net.*;
/**
* @author super
*
*/
public class MultiplyServer {
/**
* @param args
*/
//public static final int MAX_THREADS = 20;
public static final int PORT= 1995;
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
//产生一个ServerSocket
ServerSocket serverSocket = new ServerSocket(PORT);
System.out.println("A server is established..");
try{
//产生一Socket 对象,用它来处理和客户端的交互
//int i=0;
while(true){
Socket s = serverSocket.accept();
ConnectionHandler handler = new ConnectionHandler(s);
}
}
finally{
serverSocket.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
//专门设计一个线程类来处理和客户端的交互
class ConnectionHandler extends Thread{
private Socket handlerSocket ;
private PrintWriter out;
private BufferedReader in;
public ConnectionHandler(Socket s){
handlerSocket = s;
try{
//从这个套接字中分离出输入流和输出流
out = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(s.getOutputStream())),true);
in = new BufferedReader(
new InputStreamReader(s.getInputStream()));
}catch(Exception e){
e.printStackTrace();
}
start();//调用RUN 方法
}
public void run(){
System.out.println("Beginning dealing with interaction.....");
try{
//由于这个线程不知道到底处理多少次,所以只能用while形式的循环
while(true){
String str = in.readLine();
//分析读入的内容
if(str.equals("END"))
break;
//否则,加上内容之后返回
System.out.println(str);
out.println("Echo # "+str);
}
}catch(Exception e){
e.printStackTrace(System.err);
}
finally{
//回收这个打开的套接字
try{
handlerSocket.close();
}catch(Exception e){
e.printStackTrace(System.err);
}
}
}
}
/**
*
*/
package clientservermodel2;
import java.net.*;
import java.io.*;
/**
* @author super
*
*/
public class MultiplyClient {
/**
* @param args
*/
//所有的客户端的SOCKET 需要的信息应该在这个大类里面提供
public static final int MAX_THREADS = 19;
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
InetAddress addr = InetAddress.getByName(null);
//ClientSocket socket = new ClientSocket(addr,MultiplyServer.PORT);
int i = 0;
while ( i<MAX_THREADS ){
ClientSocket socket = new ClientSocket(addr,MultiplyServer.PORT);
socket.sleep(100);
i++;
}
}catch(Exception e){
e.printStackTrace();
}
}
}
//专门的一个套接字类来处理和服务器端的连接
class ClientSocket extends Thread{
private BufferedReader in;
private PrintWriter out;
private Socket s;
public ClientSocket(InetAddress addr,int PORT)
{
try{
s = new Socket(addr,PORT);
//分离出输入端和输出端
in = new BufferedReader(
new InputStreamReader(s.getInputStream()));
out = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(s.getOutputStream())),true);
//让其调用run
this.start();
// s.close();
}catch(Exception e){
e.printStackTrace();
}
}
public void run(){
try{
for(int i=0;i<15;i++){
//输入内容
out.println("Message +# "+i);
//读入返回的内容
String str = in.readLine();
System.out.println(str);
}
out.println("END");
}
catch(Exception e){
e.printStackTrace();
}
finally{
try{
s.close();
}catch(IOException e){
System.err.println("Can not close socket of client");
}
}
}
}