需求:客户端连接服务器,连接成功后给服务发送“Hello,服务器!”,服务器收到消息后,给客户端返回“欢迎登录”。
服务器端程序示例代码:
1 import java.io.InputStream;
2 import java.io.OutputStream;
3 import java.net.ServerSocket;
4 import java.net.Socket;
5
6 public class Server {
7
8 public static void main(String[] args)throws Exception {
9 //1、准备一个ServerSocket对象,并绑定8888端口
10 ServerSocket server = new ServerSocket(8888);
11 System.out.println("等待连接....");
12
13 //2、在8888端口监听客户端的连接,该方法是个阻塞的方法,如果没有客户端连接,将一直等待
14 Socket socket = server.accept();
15 System.out.println("一个客户端连接成功!!");
16
17 //3、获取输入流,用来接收该客户端发送给服务器的数据
18 InputStream input = socket.getInputStream();
19 //接收数据
20 byte[] data = new byte[1024];
21 StringBuilder s = new StringBuilder();
22 int len;
23 while ((len = input.read(data)) != -1) {
24 s.append(new String(data, 0, len));
25 }
26 System.out.println("客户端发送的消息是:" + s);
27
28 //4、获取输出流,用来发送数据给该客户端
29 OutputStream out = socket.getOutputStream();
30 //发送数据
31 out.write("欢迎登录".getBytes());
32 out.flush();
33
34 //5、关闭socket,不再与该客户端通信
35 //socket关闭,意味着InputStream和OutputStream也关闭了
36 socket.close();
37
38 //6、如果不再接收任何客户端通信,可以关闭ServerSocket
39 server.close();
40 }
41 }
客户端程序示例代码:
1 import java.io.InputStream;
2 import java.io.OutputStream;
3 import java.net.Socket;
4
5 public class Client {
6
7 public static void main(String[] args) throws Exception {
8 // 1、准备Socket,连接服务器,需要指定服务器的IP地址和端口号
9 Socket socket = new Socket("127.0.0.1", 8888);
10
11 // 2、获取输出流,用来发送数据给服务器
12 OutputStream out = socket.getOutputStream();
13 // 发送数据
14 out.write("Hello,服务器!".getBytes());
15 //会在流末尾写入一个“流的末尾”标记,对方才能读到-1,否则对方的读取方法会一致阻塞
16 socket.shutdownOutput();
17
18 //3、获取输入流,用来接收服务器发送给该客户端的数据
19 InputStream input = socket.getInputStream();
20 // 接收数据
21 byte[] data = new byte[1024];
22 StringBuilder s = new StringBuilder();
23 int len;
24 while ((len = input.read(data)) != -1) {
25 s.append(new String(data, 0, len));
26 }
27 System.out.println("服务器返回的消息是:" + s);
28
29 //4、关闭socket,不再与服务器通信,即断开与服务器的连接
30 //socket关闭,意味着InputStream和OutputStream也关闭了
31 socket.close();
32 }
33 }
注意:运行程序时,必须先启动服务器程序,主动接受客户端程序的连接请求。