代入
应用多线程来实现服务器和多个客户端之间的通信
基本步骤:
- 服务器端创建ServerSocket,循环调用accept()等待客户端的连接
- 客户端创建一个socket并请求和服务器连接
- 服务器接受客户端请求,创建socket与该客户建立专线连接
- 建立连接的两个socket在一个单独的线程上对话
- 服务器端继续等待新的连接
先写服务器端
- 当写到ServerThread03这里的时候可以先写下面的多线程ServerThread03类
//提供多个客户端的服务
public class Server03 {
public static void main(String [] args){
try {
ServerSocket serverSocket = new ServerSocket(3031);
System.out.println("服务器端启动,等待客户端的请求");
//循环监听客户顿的请求
int count = 0;
while (true){
Socket socket = serverSocket.accept();
ServerThread03 serverThread03 = new ServerThread03(socket);
serverThread03.start();
count++;
System.out.println("客户端的数量"+count);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
再写多线程ServerThrea03.java
- 注意端口号要与客户端的端口号保持一致
public class ServerThread03 extends Thread {
Socket socket = null;
public ServerThread03(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
InputStream is =socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line=br.readLine())!=null){
System.out.println("我是服务器,客户端说:"+line);
}
socket.shutdownInput();
//发送数据给客户端
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("客户端,欢迎你!");
pw.flush();
pw.close();
is.close();
isr.close();
br.close();
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
最后写客户端
public class Client02 {
public static void main(String []args){
try {
Socket socket = new Socket("localhost",3031);
//打开输出流
OutputStream os = socket.getOutputStream();
//将输出流转换成打印流
PrintWriter pw = new PrintWriter(os);
pw.write("用户名:***;密码:123456");
//刷新缓冲区
pw.flush();
socket.shutdownOutput();
//接收服务器的数据
InputStream is =socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line=br.readLine())!=null){
System.out.println("我是客户端,服务器给我的数据是:"+line);
}
//关闭资源
pw.close();
br.close();
is.close();
isr.close();;
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
效果
以往文章:
Socket通信之实现数据端跟客户端的双向通信
android学习之Socket通信
如果对您有帮助,麻烦点个赞哦,谢谢~