服务端:
- package com.zzj.test;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
- import java.net.ServerSocket;
- import java.net.Socket;
- public class SocketServerTest {
- /**
- * @param args
- */
- public static void main(String[] args) {
- try {
- // 构造方法绑定了一个端口
- ServerSocket serverSocket = new ServerSocket(8888);
- /**
- * serverSocket.accept()等待客户端连接,是一个阻塞方法,直到有客户端连接时才会返回。
- * 此方法返回的是包含客户端信息的套接字。 该方法成功返回之后,服务器就和客户端建立了一个可靠的连接,可以相互发送和接收消息了
- */
- Socket socket = serverSocket.accept();
- System.out.println("IP:" + socket.getInetAddress() + ",port:"
- + socket.getPort());
- /**
- * 使用输入流接收消息
- */
- InputStream inputStream = socket.getInputStream();// 获取输入管道
- BufferedReader reader = new BufferedReader(new InputStreamReader(
- inputStream));
- // readLine()是阻塞方法,直到读到内容并且遇到终止符(“\r”、“\n”、“\r\n”等等)或者到达流的末尾(返回Null)才返回
- System.out.println(reader.readLine());
- /**
- * 使用输出流发送消息
- */
- OutputStream outputStream = socket.getOutputStream();// 获取输出管道
- // 末尾必须加终止符,否则另一端的bufferedreader.readline()方法会处于阻塞状态,直到流关闭
- outputStream.write("Hello,client!\r".getBytes());
- outputStream.flush();
- outputStream.close();
- inputStream.close();
- socket.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
客户端:
- package com.zzj.test;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
- import java.net.Socket;
- import java.net.UnknownHostException;
- public class SocketTest {
- /**
- * @param args
- */
- public static void main(String[] args) {
- try {
- /**
- * 构造方法指定了远程主机的IP和端口号。 成功创建对象之后,客户端就和服务器建立了一个可靠的连接,可以相互发送和接收消息了
- */
- Socket socket = new Socket("127.0.0.1", 8888);
- /**
- * 使用输出流发送消息
- */
- OutputStream outputStream = socket.getOutputStream();// 获取输出管道
- // 末尾必须加终止符,否则另一端的bufferedreader.readline()方法会处于阻塞状态,直到流关闭
- outputStream.write("Hello,server!\r".getBytes());
- outputStream.flush();
- /**
- * 使用输入流接收消息
- */
- InputStream inputStream = socket.getInputStream();// 获取输入管道
- BufferedReader reader = new BufferedReader(new InputStreamReader(
- inputStream));
- // readLine()是阻塞方法,直到读到内容并且遇到终止符(“\r”、“\n”、“\r\n”等等)或者到达流的末尾(返回Null)才返回
- System.out.println(reader.readLine());
- outputStream.close();
- inputStream.close();
- socket.close();
- } catch (UnknownHostException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }