TCP程序的基本实现
TCP的程序开发是网络程序的最基本开发模型,其核心特点是使用两个类实现实现数据的交互处理:ServerSocket(服务器端)、Socket(客户端)。
SeverSocket的主要目的是设置服务器的监听端口,而Socket需要指明要连接的服务器地址与端口,下面实现一个最简单的数据的处理操作,即:Echo程序实现。
范例: 实现服务器端的定义
package EchoModel.Server;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Locale;
import java.util.Scanner;
public class EchoServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(1010); //设置服务器端口的监听端口
System.out.println("等待客户端连接......");
Socket socket = serverSocket.accept(); //定义客户端连接信息
//首先需要接受客户端接受来的信息,而后已才可以将信息处理之后发送回客户端
Scanner scanner = new Scanner(socket.getInputStream()); //接收客户端输入内容
scanner.useDelimiter("\n");//设置分隔符
PrintStream out = new PrintStream(socket.getOutputStream()); //向客户端输出内容
boolean flag = true; //循环标记
while (flag){
if(scanner.hasNext()){//有数据发送
String value = scanner.next().trim();//接收发送的内容,除去字符串开头和末尾的空格或其他字符
if("byebye".equalsIgnoreCase(value)){
out.println("ByeByeBye...");
flag = false; //结束循环
}else{
out.println("【ECHO】"+value);
}
}
}
scanner.close();
out.close();
socket.close();
serverSocket.close();
}
}
实现客户端的定义:
package EchoModel.client;
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class EchoClient {
private static final BufferedReader KEYBOARD_INPUT = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost",1010); //定义服务端的连接信息
//现在的客户端需要有输入与输出支持,所以依然要准备Scanner与PrintWriter
Scanner scanner = new Scanner(socket.getInputStream()); //接收服务器端的输入内容
scanner.useDelimiter("\n");//设置分隔符
PrintStream out = new PrintStream(socket.getOutputStream()); //向服务器端发送内容
boolean flag = true;
while (flag){
String input = getString("请输入要发送的内容").trim(); //除去字符串开头和末尾的空格或其他字符
out.println(input); //要加换行,因为换行是分隔符
if(scanner.hasNext()){ //服务器回应了
System.out.println(scanner.next());
}
if("byebye".equalsIgnoreCase(input)){
flag = false;
}
}
out.close();
scanner.close();
socket.close();
}
public static String getString(String prompt) throws IOException {
System.out.println(prompt);
String str = KEYBOARD_INPUT.readLine(); //读取键盘输入数据
return str;
}
}
首先启动服务端,再启动客户端。
请输入要发送的内容
今天天气真好
【ECHO】今天天气真好
请输入要发送的内容
byebye
ByeByeBye...
此时就实现了最基础的客户端与服务器端之间的数据通讯的操作。