以下展示一个最简单的tcp网络编程的案例。创建一个socket server和一个socket client,在client端的控制台输入字符串,能即时地把这些字符串通过tcp协议传输到server端。
服务端
以下是服务端的代码:
public class Server {private final int port;public Server(int port) {this.port = port;}public void start() {// 创建socket server,指定端口号try (ServerSocket server = new ServerSocket(port)) {System.out.println("Server started!");System.out.println("Waiting for a client...");// 监听指定的端口号,等待客户端来连接Socket socket = server.accept();System.out.println("Client accepted!");// 连接创建后,获取输入流DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));String line = "";while (!"over".equals(line)) {// 读取连接中输入的数据line = in.readUTF();System.out.println("Server receive : "+ line);}System.out.println("Closing connection...");// 关闭资源socket.close();in.close();} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {Server server = new Server(17121);server.start();}}
客户端
以下是客户端的代码:
public class Client {public Client(String address, int port) {try {// 创建socket连接到指定主机和端口Socket socket = new Socket(address, port);System.out.println("Connected!");// 控制台输入的输入流,用于从控制台输入字符串DataInputStream input = new DataInputStream(System.in);// 创建socket的输出流,用于向服务端发送数据DataOutputStream out = new DataOutputStream(socket.getOutputStream());String line = "";while (!"over".equals(line)) {// 从控制台读取一行字符串line = input.readLine();// 将读取的字符串写入socketout.writeUTF(line);}// 关闭资源input.close();out.close();socket.close();} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {Client client = new Client("127.0.0.1", 17121);}
运行
先启动服务端,然后启动客户端,在客户端的终端控制台中输入字符串,按回车,服务端能够即时收到客户端发送过来的字符串。
其中的过程是在客户端和服务端之间建立了一条tcp连接,通过tcp连接将客户端发送的数据传输到了服务端。
以下是客户端输出:
Connected!hello serveri am clientok bye byeover
然后再来看服务端的输出:
Server started!Waiting for a client...Client accepted!Server receive : hello serverServer receive : i am clientServer receive : ok bye byeServer receive : overClosing connection...
