服务器
package com.learn;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 基于TCP协议的Socket通信,实现用户登录
*
* 服务端
*/
public class Server {
public static void main(String[] args) {
Socket socket = null;
// 记录客户端数量
int count = 0;
try {
// 1.创建一个服务器端的 Socket,即 ServerSocket,指定绑定的端,并监听
ServerSocket server = new ServerSocket(8888);
// 2.调用 accept 方法开始监听,等待客户端连接
System.out.println("****服务器开始启动,等待客户端上线****");
// 循环监听客户端的连接
while (true) {
socket = server.accept();
// 创建一个新的线程
ServerThread st = new ServerThread(socket);
// 启动线程
st.start();
count++;// 客户端数量增加
System.out.println("客户端数量为:" + count);
InetAddress address = server.getInetAddress();
System.out.println("客户端IP:" + address.getHostAddress());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
客户端
package com.learn;
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 extends Thread {
// 和本线程相关的 socket
Socket socket = null;
public ServerThread(Socket socket) {
this.socket = socket;
}
// 线程执行的操作,响应客户端的请求
public void run() {
InputStream is = null;
InputStreamReader isr = null;
BufferedReader br = null;
OutputStream os = null;
PrintWriter pw = null;
try {
// 3.获取一个输入流,用来读取客户端所发送的登录信息
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();// 关闭输入流
// 4.获取输出流
os = socket.getOutputStream();
pw = new PrintWriter(os);// 包装打印流
pw.write("好的,我收到消息了,你可以出去玩了");
pw.flush();
socket.shutdownOutput();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
// 5.关闭资源
if (pw != null)
pw.close();
if (br != null)
br.close();
if (isr != null)
isr.close();
if (is != null)
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}