package com.neutron.network.tcp.demo;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server3 {
public static void accept() throws IOException {
// 定义服务器端服务,并且监听特定端口
ServerSocket server = new ServerSocket(10005);
// 获取客户端服务,阻塞式方法
Socket client = server.accept();
// 获取客户端socket读取流
BufferedReader buffIn = new BufferedReader(new InputStreamReader(client.getInputStream()));
// 获取客户端socket写入流
BufferedWriter buffOut = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
String receive = "";
while ((receive = buffIn.readLine()) != null) {
System.out.println("server receive:" + "client hostname::" + client.getInetAddress().getHostAddress());
System.out.println("server receive:" + "client port::" + client.getPort());
System.out.println("server receive:" + "client message::" + receive);
String send = receive.toUpperCase();
buffOut.write(send);
// 必须newLine,因为客户端使用readLine判断输入结束的标记是回车
buffOut.newLine();
// 必须flush,否则客户端无法接收数据
buffOut.flush();
System.out.println("client will receive::" + receive.toUpperCase());
}
client.close();
server.close();
}
public static void main(String[] args) throws IOException {
accept();
}
}
package com.neutron.network.tcp.demo;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client3 {
public static void send() throws UnknownHostException, IOException {
// 定义客户端, 并指定远程主机和端口
Socket client = new Socket("127.0.0.1", 10005);
// 定义读取键盘数据的流对象
BufferedReader buffr = new BufferedReader(new InputStreamReader(System.in));
// 将数据写入socket输出流,发送给服务器端
BufferedWriter buffOut = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
// 定义socket读取流,读取服务器端返回的数据
BufferedReader buffIn = new BufferedReader(new InputStreamReader(client.getInputStream()));
// 客户端发送的数据
String message = "";
// 服务器端发送的数据
String buff2 = "";
while ((message = buffr.readLine()) != null) {
if ("over".equalsIgnoreCase(message)) {
break;
}
// 将数据写入缓存中
buffOut.write(message);
// 为何要使用此方法,因为服务器接收数据使用readLine方法,此方法需要根据回车键判断输入结束
buffOut.newLine();
// 清除缓存区数据,不flush缓存区中数据,服务器段无法接收数据
buffOut.flush();
buff2 = buffIn.readLine();
System.out.println("client receive:" + "client message :: " + buff2);
}
buffr.close();
client.close();
}
public static void main(String[] args) throws UnknownHostException, IOException {
send();
}
}