通过TCP协议来模拟用户和服务器之间信息交流
- 首先需要创建一个服务器端
public class TCPServer {
public static void main(String[] args) throws IOException {
//首先创建ServerSocket来实现与客户端连接
ServerSocket listener = new ServerSocket(1999);
System.out.println("服务器已启动....");
//循环
while (true) {
//接收客户端发来的信息
Socket ns = listener.accept();
//创建一个新的线程对象并启动 将接收自客户端的信息传入此线程
new SocketThread(ns).start();
}
}
}
- 创建线程
public class SocketThread extends Thread {
private Socket socket;
//获取客户端发送到服务器端的信息
public SocketThread(Socket socket){
this.socket =socket;
}
@Override
public void run() {
System.out.println(socket.getInetAddress()+"加入了直播间");
if (socket!=null){
BufferedReader br=null;
try {//调用输入流
InputStream is = socket.getInputStream();
//缓存
br = new BufferedReader(new InputStreamReader(is,"utf-8"));
//循环
while(true){
//读一行
String dada =br.readLine();
//当输入数据读完之后跳出循环
if (dada==null)break;
System.out.println(socket.getInetAddress()+"发送了:"+dada);
//输出886或者byebye停止循环
if (dada.equals("886")||dada.equals("byebye")){
break;
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
System.out.println(socket.getInetAddress()+"退出了直播间");
br.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
- 创建客户端
public class TCPClient {
public static void main(String[] args) throws Exception{
//连接客户端
Socket socket = new Socket("192.168.40.1",1999);
//创建输出流
OutputStream outputStream = socket.getOutputStream();
//缓存 使用utf-8编码
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream,"utf-8"));
//输入数据
Scanner input = new Scanner(System.in);
//循环
while(true){
String data = input.nextLine();
//写入缓存
bw.write(data);
//换行
bw.newLine();
//释放缓存中数据
bw.flush();
//当输入886或者byebye时跳出循环
if (data.equals("886")||data.equals("byebye")){
break;
}
}
bw.close();
socket.close();
}
}
-
测试
-
首先启动服务器端
-
服务器已启动
-
-
然后启动客户端
-
服务器已启动 /192.168.40.1加入了直播间
-
-
输入“我爱java”
-
服务器已启动 /192.168.40.1加入了直播间 /192.168.40.1发送了:我爱java
-
-
输入886或者byebye
-
服务器已启动 /192.168.40.1加入了直播间 /192.168.40.1发送了:我爱java /192.168.40.1发送了:886 /192.168.40.1退出了直播间
-
-
再次启动客户端
-
服务器已启动 /192.168.40.1加入了直播间 /192.168.40.1发送了:我爱java /192.168.40.1发送了:886 /192.168.40.1退出了直播间 /192.168.40.1加入了直播间
-
-