title: Java多线程实现多客户端的通信
date: 2019-05-05 12:50:00
Java多线程实现多客户端的通信
昨天学了Java中网络支持Socket应用,写了一个基于TCP通信的简陋的登录案例,代码如下:
服务器端:
package com.youdian.singinscoket;
import java.io.BufferedReader;
import java.io.Closeable;
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;
/***
* 基于TCP协议的Socket,实现用户登录
* 服务器端
* @author hkq
*
*/
public class Servert {
public static void main(String[] args) {
try {
//1.创建一个服务器端的Socket,即ServerSocket,指定绑定的端口,并监听此端口
ServerSocket serverSocket=new ServerSocket(8088);
//2.调用accept()方法开始监听.
System.out.println("服务器端启动,等待客户端连接");
Socket socket= serverSocket.accept();
//3.获取字节输入流,并读取客户端信息
InputStream is=socket.getInputStream();
//4.将字节流装换为字符流,好处是提高读取的效率
InputStreamReader isr=new InputStreamReader(is);
//5.搭配使用,为字符输入流添加缓冲
BufferedReader br=new BufferedReader(isr);
//6.定义String类型的info,循环读取客户端信息并在控制台输出
String info=null;
while ((info=br.readLine())!=null) {
System.out.println("服务器端接收到客户端数据为:"+info);
}
//7.关闭socket输入流
socket.shutdownInput();
//8.获取输出流,响应客户端的请求
OutputStream os =socket.getOutputStream();
//将字节输出流转换为打印输出流
PrintWriter pw=new PrintWriter(os);
//服务器端向客户端发送响应信息
pw.write("登录成功,欢迎你");
//调用flush()方法刷新缓存
pw.flush();
//9.关闭资源
pw.close();
os.close();
br.close();
isr.close();