TCP程序的基本实现
TCP程序的最基本的开发模型,其核心的特点时使用两个类实现数据的交互处理:ServerSocket(服务器端)、Socket(客户端)。
ServerSocket的主要目的是设置服务器的监听端口,而Socket需要指明要连接的服务器处理操作,即:Echo程序实现。
public class EchoServer {
public static void main(String[] a) throws Exception {
ServerSocket server = new ServerSocket(8000); //设置服务器端的监听端口
System.out.println("等待客户端连接。。。。。。。。。");
Socket client = server.accept();//有客户端连接
// 首先需要先接受客户端发来的消息,而后才可以将信息处理之后发送回客户端
Scanner s = new Scanner(client.getInputStream());//客户端输入流
s.useDelimiter("\n");//设置分隔符
PrintWriter out = new PrintWriter(client.getOutputStream());//客户端输出流
boolean flag = true; //循环标记
while (flag) {
if(s.hasNext()) {
String val = s.next().trim();
if("byebye".equalsIgnoreCase(val)) {
out.println("ByeBye");
flag = false;
}else {
out.println("[Echo]" + val);
out.flush();//强制刷新缓存区
}
}
}
s.close();
out.close();
client.close();
server.close();
}
}
。。。。。
public class EchoClient {
private static final BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] a) throws Exception {
Socket client = new Socket("localhost",9999); //定义服务端的连接信息
Scanner s = new Scanner(client.getInputStream());//接收服务器的输入内容
PrintWriter out = new PrintWriter(client.getOutputStream());//向服务器端发送内容
boolean flag = true; //循环标记
while (flag) {
String input = getString("请输入要发送的内容:");
out.println(input);//加换行
if(s.hasNext()) {//服务器有回应了
System.out.println(s.hasNext());
}
if("byebye".equalsIgnoreCase(input)) {
flag = false;
}
}
s.close();
out.close();
client.close();
}
public static String getString(String prompt) throws Exception {
System.out.println(prompt);
String str = buf.readLine();
return str;
}
}