现在我们来介绍TCp双向通信实现客户端与服务端简单的双向通信如果有TCp单向通信不太明白的同学可以去看我的主页章节哦!
宝子们看看哦!
1.客户端代码
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Objects;
import java.util.Scanner;
//在一个线程中运行,必须要有逻辑顺序,用户端需要先写入数据,输出流中无数据输入会处于阻塞状态,写入数据后等待服务端返回数据否则会处于阻塞状态。
public class TwiceSockedClient {
public static void main(String[] args) {
try(Socket socket = new Socket("192.168.124.6",7777);
Scanner scanner = new Scanner(System.in);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
){
while (true)
{
System.out.print("刘浩琦:");
String temp = scanner.nextLine();
printWriter.println(temp);
//及时将缓冲区中的数据写入输出流中去,此处很重要!!!!
printWriter.flush();
if (Objects.equals(temp,"exit"))
{
System.out.println("您已结束对话");
break;
}
String str = bufferedReader.readLine();
System.out.println("陈静宜:"+str);
if (Objects.equals(str,"exit"))
{
System.out.println("对方已结束通话");
break;
}
}
}catch (Exception e)
{
System.out.println("服务器连接失败..........");
}
//这种情况只能客户端先发送消息,否则程序无法正常运行。
}
}
2.服务端代码
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Objects;
import java.util.Scanner;
//在一个线程中运行,必须要有逻辑顺序,服务端先要读取数据,无数据处于阻塞状态,然后在写数据,输出流中无写入数据会处于阻塞状态
public class TwiceSockedServer {
public static void main(String[] args) {
System.out.println("正在监听端口中.......");
try(ServerSocket serverSocket = new ServerSocket(7777);
Socket socket = serverSocket.accept();
Scanner scanner = new Scanner(System.in);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
) {
System.out.println("连接成功!!");
while (true)
{
String str = bufferedReader.readLine();
System.out.println("刘浩琦:"+str);
if (Objects.equals("exit",str))
{
System.out.println("对方已结束通话!!");
break;
}
System.out.print("陈静宜:");
String temp = scanner.nextLine();
printWriter.println(temp);
printWriter.flush();
//及时将缓冲区中的数据写入输出流中去,此处很重要!!!!
if (Objects.equals(temp,"exit"))
{
System.out.println("您已结束通话");
break;
}
}
}catch (Exception e)
{
System.out.println("服务器创建失败.....");
}
}
}
//这种情况下服务端无法先发送消息,否则无法正常运行.
该双向通信说白了就是在一个线程中进行的,必须要有逻辑顺序,首先要启动服务端,然后启动客户端,接着客户端发送消息到服务端,服务端接收到消息显示到控制台上,然后服务端发送消息到客户端,客户端接收到消息后才能进行再一次的输入,这就是一次完整的过程。
输入exit会结束两端的通话。以及flush方法会刷新缓存区,将缓存区的信息直接发送过去,这里不可缺少。
3.运行结果
这就是一次简单的通话。宝子们点个赞呀,明天更新多线程点对点聊天通信