客户端可以多次向服务器端发送消息。服务器端在接收到消息以后,也可以多次向客户端发送消息
服务器端:
package com.tcp;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
/*
TCP协议服务器端
*/
public class revices {
public static final Logger log = LoggerFactory.getLogger("revices.class");
public static void main(String[] args) {
// 服务器端对象
try {
ServerSocket ss = new ServerSocket(9090);
// 客户端和服务器端建立连接
Socket sc = ss.accept();
/*
创建字节输入流用来从TCP通信管道中读取数据
*/
BufferedReader reader = new BufferedReader(new InputStreamReader(sc.getInputStream()));
String str;
// 获取客户端的ip地址
SocketAddress ip = sc.getRemoteSocketAddress();
/*
创建打印流对象,实现服务器向客户端响应数据的功能。
通过
*/
PrintWriter pw = new PrintWriter(new OutputStreamWriter(sc.getOutputStream()));
// 从键盘录入数据
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
String scanner;
while ((str = reader.readLine()) != null){
System.out.println(ip + ": " +str);
// 从键盘录入字符串并输出该字符串
scanner = r.readLine();
pw.println(scanner);
pw.flush();
}
} catch (IOException e) {
// e.printStackTrace();
}
}
}
客户端:
package com.tcp;
import java.io.*;
import java.net.Socket;
/*
TCP通信客户端
*/
public class sends {
public static void main(String[] args) throws Exception {
// 添加需要连接到的服务器地址
Socket sc = new Socket("127.0.0.1",9090);
// 通过打印流发送数据
PrintWriter writer = new PrintWriter(sc.getOutputStream());
/*
如果这里使用的是writer方法,那服务器端接收数据的时候如果选择一行一行的接收,服务器端会接收不到数据
*/
// 从键盘录入数据
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
String str;
/*
创建字节输入流用来从TCP通信管道中读取数据
*/
BufferedReader reader = new BufferedReader(new InputStreamReader(sc.getInputStream()));
String str1; // 用来接收从服务器发送过来的数据
while (true){
str = r.readLine();
writer.println("客服端: " + str);
writer.flush();
str1 = reader.readLine();
System.out.println("服务器: " + str1);
}
}
}
|