服务器线程类
package com.susu;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
public class ServerThread implements Runnable{
private Socket socket=null;
public ServerThread(Socket socket){
this.socket=socket;
}
@Override
public void run() {
// TODO Auto-generated method stub
InputStream is=null;
InputStreamReader isr=null;
BufferedReader br=null;
try {
//输入流
is=socket.getInputStream();
isr=new InputStreamReader(is);
br=new BufferedReader(isr);
String info=null;
while((info=br.readLine())!=null){
System.out.println("我是服务端,客户端说:"+info);
}
//关闭输入流
socket.shutdownInput();
//输出流
OutputStream os=socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
pw.write("欢迎你!!");
pw.flush();
//关闭输出流
socket.shutdownOutput();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
//关闭资源
try {
if(br!=null)
br.close();
if(isr!=null)
isr.close();
if(is!=null)
is.close();
if(socket!=null)
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
服务端
package com.susu;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
/**
* 服务端
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ServerSocket ss = new ServerSocket(2000);
System.out.println("***服务器即将启动,等待客户端连接***");
Socket socket = null;
int count = 0;
// 循环监听客户端的连接
while (true) {
socket = ss.accept();
// 创建线程实例
ServerThread serverThread = new ServerThread(socket);
Thread thread = new Thread(serverThread);
// 开启线程
thread.start();
System.out.println("客户端IP地址:"
+ socket.getInetAddress().getHostAddress());
System.out.println("已连接的客户端数:" + (++count));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
客户端:
package com.susu;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) {
try {
Socket socket=new Socket("127.0.0.1", 2000);
//输出流
OutputStream os=socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
pw.write("今天天气很好~");
pw.flush();
//关闭输出流
socket.shutdownOutput();
//输入流
InputStream is=socket.getInputStream();
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
String info=null;
while((info=br.readLine())!=null){
System.out.println("我是客户端,服务器说:"+info);
}
//关闭资源
pw.close();
os.close();
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果:
由于是客户端和服务端都是本机,IP地址一直不会变~~这样监听的也是连接数,不是客户端的个数。
如果要优化 可以通过IP地址来计算客户端的个数~~