客户端发信息给服务器端,服务器端也发信息给客户端,而且有时候是同时进行的
创建两个线程,一个线程获取信息,一个接收信息
服务器端:
public class Server {
static Socket socket = null;
public static void main(String[] args) throws IOException {
//搭建服务器端
ServerSocket serverSocket = new ServerSocket(8001);
System.out.println("服务器搭建成功");
//连接客服端
socket = serverSocket.accept();
System.out.println("客户端连接成功");
Server server =new Server();
Thread thread = server.new Thread1();
thread.start();
Thread thread2 = server.new Thread2();
thread2.start();
}
public void getMessage() throws IOException {
//接受客服端的消息
InputStream inputStream = socket.getInputStream();
InputStreamReader iReader = new InputStreamReader(inputStream);
BufferedReader br= new BufferedReader(iReader);
String string = null;
while((string = br.readLine())!=null){
if(string.equals("byte")){
break;
}
System.out.println("来自客户端的消息:》"+string);
}
System.out.println("聊天结束 ");
}
public void sendMessage() throws IOException{
OutputStream outputStream = socket.getOutputStream();
PrintStream printStream = new PrintStream(outputStream);
//从控制台输入信息
InputStream inputStream= System.in;//标准输入流
//从字节流到字符流的桥梁 InputStreamReader本神是字符流
InputStreamReader inputStreamReader =new InputStreamReader(inputStream);
//加入缓冲流,也叫管道流主要是为了加快速度
BufferedReader bReader = new BufferedReader(inputStreamReader);
//c从控制台读取一行数据
String string = null;
while((string = bReader.readLine())!=null){
if(string.equals("byte")){
break;
}
printStream.println(string);
}
printStream.flush();
socket.shutdownOutput();
}
//成员内部类相当于成员变量
class Thread1 extends Thread{
public void run(){
try {
getMessage();
} catch (Exception e) {
e.printStackTrace();
}
}
}
//成员内部类相当于成员变量
class Thread2 extends Thread{
public void run(){
try {
sendMessage();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
客户端:
public class Client {
static Socket socket = null;
public static void main(String[] args) throws UnknownHostException, IOException {
//连接服务器端
socket = new Socket("127.0.0.1",8001);
System.out.println("服务器连接成功");
Client client = new Client();
//创建线程,发送信息
Thread1 thread1 = client.new Thread1();
thread1.start();
Thread2 thread2 = client.new Thread2();
thread2.start();
}
class Thread1 extends Thread{
public void run(){
try {
sendMessage();
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Thread2 extends Thread{
public void run(){
try {
sendMessage();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void sendMessage() throws IOException{
OutputStream outputStream = socket.getOutputStream();
PrintStream printStream = new PrintStream(outputStream);
//从控制台输入信息
InputStream inputStream= System.in;//标准输入流
//从字节流到字符流的桥梁 InputStreamReader本神是字符流
InputStreamReader inputStreamReader =new InputStreamReader(inputStream);
//加入缓冲流,也叫管道流主要是为了加快速度
BufferedReader bReader = new BufferedReader(inputStreamReader);
//c从控制台读取一行数据
String string = null;
while((string = bReader.readLine())!=null){
if(string.equals("byte")){
break;
}
printStream.println(string);
}
printStream.flush();
socket.shutdownOutput();
}
public void getMessage() throws IOException {
//接受客服端的消息
InputStream inputStream = socket.getInputStream();
InputStreamReader iReader = new InputStreamReader(inputStream);
BufferedReader br= new BufferedReader(iReader);
String string = null;
while((string = br.readLine())!=null){
if(string.equals("byte")){
break;
}
System.out.println("服务器客户端的消息:》"+string);
}
System.out.println("聊天结束 ");
}
}